moyashidaisuke's diary

moyashidaisuke's diary

AWS CodeBuildでCodecovを呼ぶ

2019-03-30 moyashidaisukeAWS

[:contents]

概要

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

[https://aws.amazon.com/jp/codebuild/:embed:cite]

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

[https://codecov.io/:embed:cite]

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

[https://docs.codecov.io/docs/supported-ci-providers:embed:cite]

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

やり方

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

解説

基本的な方針は、こちら

[https://docs.codecov.io/v4.3.0/docs/about-the-codecov-bash-uploader:embed:cite]

環境変数に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の変数から渡すようにしました。

[https://github.com/codecov/codecov-bash/blob/master/codecov:embed:cite]

[https://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/build-env-ref-env-vars.html:embed:cite]

ちなみに、

sed ‘s/branch///g’

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

所感とか

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

[https://github.com/codecov/codecov-python/issues/140:embed:cite]

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