AWS CodeBuildでCodecovを呼ぶ
概要
AWSのサービスでCodeBuildというサービスがあります。名前はBuildですが、設定次第でテストを回したりしてCI的に使えます。
Codecovはテストの結果(主にcoverage周り)をいい感じに表示してくれるサービスです。
で、CodeCovは主要なCI系のサービスにはオフィシャルで対応しているのですが、なんとCodeBuildがリストにありません、、、
そこをごにょっとしたやり方です。
やり方
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
解説
基本的な方針は、こちら
環境変数に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の変数から渡すようにしました。
ちなみに、
sed 's/branch\///g'
をつけているのは、 developブランチの場合、braunch/develop
という名前でCODEBUILD_WEBHOOK_TRIGGERに設定されているからです。
所感とか
issueはあがってるようですが、放置されてるようです。
CodeBuildeでCIできるとコスト的にメリットが大きいのですが、まだまだ周辺環境がいまいち揃ってないのが残念です。