CloudBuild, ava, GolangでCodecov

5名までは無料という噂のCodecov導入してみた

事前準備

Codecov登録
何はともあれCodecovでSign Up
GitHubアカウントで登録していくとこんな画面にたどり着く

スクリーンショット 2020-07-17 9.51.13

トークンの保存
ここで出てきたトークンをSecret Managerに登録しておく

スクリーンショット 2020-07-17 13.27.03

Cloud Buildにロール追加
Cloud Buildの設定に表示されるサービスアカウントをIAMで探し
「シークレットマネージャー」->「Secret Managerのシークレットアクセサー」ロールを追加

スクリーンショット 2020-07-17 13.36.45

Cloud Buildの設定

avaのcoverage
nycをインストール
package.jsonにavaテストのscriptを記載

{
  ...
  "scripts": {
   "test": "nyc -s --reporter=text-lcov ava && nyc report --reporter=text-lcov > ./coverage.lcov"
 },

-sで標準出力を消して、nyc reportでカバレッジファイルを出力
Codecovがこのファイルをよろしく見つけてくれる

cloudbuild.yamlにテストのstep記述

steps:
- name: 'node:12.16.0-alpine'
  dir: 'frontend'
  entrypoint: yarn
  args: ['test']

Golangのcoverage

cloudbuild.yamlにテストのstep追記

- name: 'golang:1.14-buster'
  entrypoint: /bin/sh
  args: [
    '-c', 
    'go test -coverprofile=coverage.txt -covermode=atomic ./...'
  ]

これでava, Golangで2Coverageファイルが出力された

Codecovにcoverageファイルを投げつける

Secret managerからトークン取得->Codecovに投げるstep追記

- name: gcr.io/cloud-builders/gcloud
  entrypoint: "bash"
  args:
    [
      "-c",
      "gcloud secrets versions access latest --secret=codecov-token > ./codecov-token.txt"
    ]
- name: gcr.io/cloud-builders/gcloud
  entrypoint: "bash"
  args:
    [
      "-c",
      "bash <(curl -s https://codecov.io/bash) -t $(< ./codecov-token.txt) -C $COMMIT_SHA -B $BRANCH_NAME"
    ]

step間で使える./codecov-token.txtに記載されたトークンを指定する

検証

これでCloud Build実行すると以下の通り素敵にCodecov使える!
CodecovページでavaもgolangもCoverageみれる!
(全然テストかけてねーw)

画像4

何が素敵って
GitHub App Integration設定するとGitHub上で勝手にコメントされるし
Coverage下がってると怒られる。
Coverage目標設定して超えないと怒られる設定もできるみたい

画像5

まとめ

PR作るたびに可視化されるとやる気でるし
テスト書いてよーって指摘しなくていいのは精神的にもいいね!



この記事が気に入ったらサポートをしてみませんか?