もやぶろ

moyashidaisukeのブログだからもやぶろ。フリーランスのエンジニアのダイスケです。プログラム関連とかギター関連とか旅行関連とか色々。

AWS CodeBuildでCodecovを呼ぶ

概要

AWSのサービスでCodeBuildというサービスがあります。名前はBuildですが、設定次第でテストを回したりしてCI的に使えます。

aws.amazon.com

Codecovはテストの結果(主にcoverage周り)をいい感じに表示してくれるサービスです。

codecov.io

で、CodeCovは主要なCI系のサービスにはオフィシャルで対応しているのですが、なんとCodeBuildがリストにありません、、、

docs.codecov.io

そこをごにょっとしたやり方です。

やり方

env:
  variables:
    region: "ap-northeast-1" # とりあえず入れてますが、要検討
    CODECOV_TOKEN: "XXXXXXXXXXX"  # Repository Upload Token


phases:
  pre_build:
    commands:
      # codecov用の設定
      # https://github.com/codecov/codecov-bash/blob/master/codecov
      # https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-env-vars.html
      - VCS_COMMIT_ID=$CODEBUILD_RESOLVED_SOURCE_VERSION
      - VCS_BRANCH_NAME=$(echo $CODEBUILD_WEBHOOK_TRIGGER | sed 's/branch\///g')

  build:
    commands:
      # テスト実行する

  post_build:
    commands:
       # codecovに連携する
      - curl -s https://codecov.io/bash > codecov.sh
      - bash ./codecov.sh

解説

基本的な方針は、こちら

docs.codecov.io

環境変数にCODECOV_TOKEN を設定して、shellを呼びます。

工夫ポイントはこの2行です

      - VCS_COMMIT_ID=$CODEBUILD_RESOLVED_SOURCE_VERSION
      - VCS_BRANCH_NAME=$(echo $CODEBUILD_WEBHOOK_TRIGGER | sed 's/branch\///g')

gitのコミットhashと、ブランチ名を渡して上げています。通常だとshellコマンド内で自動でとってくれるのですが、私が作ったCodeBuildの環境だと取得できず、

commit is missing

というエラーになりました。

そこでshellのコードを確認すると、環境変数で渡してあげられる事がわかったため、CodeBuildの変数から渡すようにしました。

github.com

docs.aws.amazon.com

ちなみに、

sed 's/branch\///g'

をつけているのは、 developブランチの場合、braunch/develop という名前でCODEBUILD_WEBHOOK_TRIGGERに設定されているからです。

所感とか

issueはあがってるようですが、放置されてるようです。

github.com

CodeBuildeでCIできるとコスト的にメリットが大きいのですが、まだまだ周辺環境がいまいち揃ってないのが残念です。