Когда вы настраиваете конвейер CI / CD для своего проекта, вы, вероятно, захотите рассчитать покрытие кода и отправить его в сторонний сервис, такой как Codecov.

Я собираюсь показать вам, как настроить это в Google Cloud Build.

Проблема

Инструмент codecov по умолчанию должен запускаться из репозитория git, иначе он выдаст ошибку:

fatal: Not a git repository

Причина в том, что codecov предназначен для отчета о покрытии для конкретной ветки и фиксации вашего кода.

Поскольку приложение Google Cloud Build GitHub App не воссоздает полный репозиторий git, нам нужен обходной путь.

Решение

Решение состоит в том, чтобы вручную передать ветку и зафиксировать инструмент:

$ codecov --token=X --disable=detect --commit=FOO --branch=BAR

Cloud Build делает такую ​​информацию доступной для сборки посредством встроенных замен.

cloudbuild.yaml

steps: 
- name: 'gcr.io/cloud-builders/npm'  
  args: ['install'] 
- name: 'gcr.io/cloud-builders/npm'  
  args: ['run', 'ci'] 
- name: 'gcr.io/cloud-builders/npm'  
  args: 
   [
     'run', 
     'codecov',
     '--', 
     '--disable=detect', 
     '--commit=$COMMIT_SHA', 
     '--branch=$BRANCH_NAME'
   ]

package.json

{
  "devDependencies": {
    "codecov": "3.1.0", 
    "mocha": "5.2.0",
    "nyc": "13.1.0"
  },
  "scripts": {
     "ci": "NODE_ENV=test node_modules/.bin/nyc node_modules/.bin/mocha --reporter spec 'server/test/**/*test.js' && node_modules/.bin/nyc report --reporter=text-lcov > coverage.lcov",
     "codecov": "node_modules/.bin/codecov --token=X"
  }
}

Заключение

Вы можете обойти обнаружение инструмента codecov и вручную передать фиксацию и ветвь текущего запуска CI.

Конфигурацию Cloud Build легко читать: она устанавливает зависимости, запускает тесты, а затем выгружает результаты в Codecov.

В моем следующем посте я покажу вам, как можно кэшировать первый шаг для повышения производительности.