Загружать результаты покрытия кода jest в codecov во время сборки облака Google - PullRequest
1 голос
/ 07 апреля 2020

Я пытаюсь выяснить, как загрузить свои отчеты о покрытии шутливого кода в codecov. Оттуда документация :

bash <(curl -s https://codecov.io/bash) -t token

Поэтому я попытался запустить сценарий bash из этапа построения облака с помощью следующего cloudbuild.yaml

steps:
  - name: node:10.15.1
    entrypoint: npm
    args: ["install"]
  - name: node:10.15.1
    entrypoint: npm
    args: ["test", "--", "--coverage"]
  - name: 'gcr.io/cloud-builders/curl'
    entrypoint: bash
    args: ['<(curl -s https://codecov.io/bash)', '-t', '$_CODECOV_TOKEN']
  - name: node:10.15.1
    entrypoint: npm
    args: ["run", "build:production"]

I получить следующую ошибку:

Step #2: bash: <(curl -s https://codecov.io/bash): No such file or directory

Очевидно, что <(curl -s https://codecov.io/bash) интерпретируется как строка, а я хочу, чтобы она была выполнена.

Редактировать:

Я изменил свой шаг сборки следующим образом:

  - name: "gcr.io/cloud-builders/curl"
    entrypoint: bash
    args: ["./scripts/codecov-upload.bash", "$_CODECOV_TOKEN"]

И добавил файл codecov-upload.bash

bash <(curl -s https://codecov.io/bash) -t $1

При запуске моего облака успешно соберите загрузчик кодеков bash начинается. Однако мне не удается загрузить отчеты в clodecov.

Вот записи из codecov bash Uploader:

Step #2: Test Suites: 1 passed, 1 total
Step #2: Tests:       1 passed, 1 total
Step #2: Snapshots:   1 passed, 1 total
Step #2: Time:        28.981s
Step #2: Ran all test suites.
Finished Step #2
Starting Step #3
Step #3: Already have image (with digest): gcr.io/cloud-builders/curl
Step #3: /dev/fd/63: option requires an argument -- t
Step #3: 
Step #3:   _____          _
Step #3:  / ____|        | |
Step #3: | |     ___   __| | ___  ___ _____   __
Step #3: | |    / _ \ / _` |/ _ \/ __/ _ \ \ / /
Step #3: | |___| (_) | (_| |  __/ (_| (_) \ V /
Step #3:  \_____\___/ \__,_|\___|\___\___/ \_/
Step #3:                               Bash-tbd
Step #3: 
Step #3: 
Step #3: x> No CI provider detected.
Step #3:     Testing inside Docker? http://docs.codecov.io/docs/testing-with-docker
Step #3:     Testing with Tox? https://docs.codecov.io/docs/python#section-testing-with-tox
Step #3:     project root: .
Step #3: /dev/fd/63: line 897: git: command not found
Step #3: /dev/fd/63: line 897: hg: command not found
Step #3:     Yaml not found, that's ok! Learn more at http://docs.codecov.io/docs/codecov-yaml
Step #3: ==> Running gcov in . (disable via -X gcov)
Step #3: ==> Python coveragepy not found
Step #3: ==> Searching for coverage reports in:
Step #3:     + .
Step #3:     -> Found 3 reports
Step #3: ==> Detecting git/mercurial file structure
Step #3: ==> Reading reports
Step #3:     + ./coverage/clover.xml bytes=163786
Step #3:     + ./coverage/coverage-final.json bytes=444241
Step #3:     + ./coverage/lcov.info bytes=71582
Step #3: ==> Appending adjustments
Step #3:     http://docs.codecov.io/docs/fixing-reports
Step #3:     + Found adjustments
Step #3: ==> Gzipping contents
Step #3: ==> Uploading reports
Step #3:     url: https://codecov.io
Step #3:     query: branch=&commit=&build=&build_url=&name=&tag=&slug=&service=&flags=&pr=&job=
Step #3:     -> Pinging Codecov
Step #3: https://codecov.io/upload/v4?package=bash-tbd&token=secret&branch=&commit=&build=&build_url=&name=&tag=&slug=&service=&flags=&pr=&job=
Step #3:     -> Uploading
Step #3:     X> Failed to upload
Step #3:     -> Sleeping for 30s and trying again...
Step #3:     -> Pinging Codecov
Step #3: https://codecov.io/upload/v4?package=bash-tbd&token=secret&branch=&commit=&build=&build_url=&name=&tag=&slug=&service=&flags=&pr=&job=
Step #3:     -> Uploading
Step #3:     X> Failed to upload
Step #3:     -> Sleeping for 30s and trying again...
Step #3:     -> Pinging Codecov
Step #3: https://codecov.io/upload/v4?package=bash-tbd&token=secret&branch=&commit=&build=&build_url=&name=&tag=&slug=&service=&flags=&pr=&job=
Step #3:     -> Uploading
Step #3:     X> Failed to upload
Step #3:     -> Sleeping for 30s and trying again...
Step #3:     -> Pinging Codecov
Step #3: https://codecov.io/upload/v4?package=bash-tbd&token=secret&branch=&commit=&build=&build_url=&name=&tag=&slug=&service=&flags=&pr=&job=
Step #3:     -> Uploading
Step #3:     X> Failed to upload
Step #3:     -> Sleeping for 30s and trying again...
Step #3:     -> Uploading to Codecov
Step #3:     HTTP 400
Step #3: missing required properties: [&#39;commit&#39;]
Finished Step #3
Starting Step #4
Step #4: Already have image: node:10.15.1
Step #4: 

Я заметил две вещи в журналах:

1. Step #3: /dev/fd/63: option requires an argument -- t
2. Step #3: missing required properties: [&#39;commit&#39;]

При поиске исправления № 2 я обнаружил в SO следующее: codecov.io выдает ошибку в сочетании с конвейерами Bitbucket

Там, где ответ кажется к этому git не установлено в моем контейнере.

Поэтому я попытался создать пользовательский образ контейнера с помощью docker:

Dockerfile:

FROM gcr.io/cloud-builders/curl
RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y git

Итак, я создаю образ:

build -t "gcr.io/[PROJECT_ID]/builder .

И обновляю свой шаг сборки, чтобы использовать вместо этого образ:

  • name: "gcr.io/$PROJECT_ID/builder" точка входа: bash args: ["./scripts/codecov-upload.bash"]

Но использование изображения, созданного с помощью этого файла dockerfile, возвращает те же ошибки.

Возможно, Dockerfile для этого пользовательского изображения не правильный? Или я что-то упускаю?

Мой код доступен на github: https://github.com/thdk/timesheets/tree/feat/112-1

Ответы [ 2 ]

2 голосов
/ 10 апреля 2020

После ответа от Ajordat , ответа о сообществе кодеков и изучения исходного кода пакетного загрузчика кодеков я обнаружил, что в некоторой среде переменные необходимы для работы bash.

Я изменил свой шаг сборки в cloudbuild.yaml, чтобы включить переменные среды. Их значения включены в переменные подстановки по умолчанию из сборки облака Google .

- name: 'gcr.io/cloud-builders/curl'
  entrypoint: bash
  args: ['-c', 'bash <(curl -s https://codecov.io/bash)']
  env:
  - 'VCS_COMMIT_ID=$COMMIT_SHA'
  - 'VCS_BRANCH_NAME=$BRANCH_NAME'
  - 'VCS_PULL_REQUEST=$_PR_NUMBER'
  - 'CI_BUILD_ID=$BUILD_ID'
  - 'CODECOV_TOKEN=$_CODECOV_TOKEN' # _CODECOV_TOKEN is user user substituion variable specified in my cloud build trigger

Это работает, за исключением предупреждения от bash загрузчика:

Step #3: /dev/fd/63: line 897: git: command not found
Step #3: /dev/fd/63: line 897: hg: command not found

Поэтому мне пришлось использовать свой собственный образ сборки, начиная с образа скручивания, и добавить к нему git.

Dockerfile:

FROM gcr.io/cloud-builders/curl
RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y git

И собрать образ:

docker build -t "gcr.io/[PROJECT_ID]/builder .

Итак, мой последний cloudbuild.yaml файл:

steps:
  - name: node:10.15.1
    entrypoint: npm
    args: ["install"]
  - name: node:10.15.1
    entrypoint: npm
    args: ["test", "--", "--coverage"]      
  - name: node:10.15.1
    entrypoint: npm
    args: ["run", "build:production"]
  - name: "gcr.io/$PROJECT_ID/builder"
    entrypoint: bash
    args: ['-c', 'bash <(curl -s https://codecov.io/bash)']
    env:
    - 'VCS_COMMIT_ID=$COMMIT_SHA'
    - 'VCS_BRANCH_NAME=$BRANCH_NAME'
    - 'VCS_PULL_REQUEST=$_PR_NUMBER'
    - 'CI_BUILD_ID=$BUILD_ID'
    - 'CODECOV_TOKEN=$_CODECOV_TOKEN'
1 голос
/ 09 апреля 2020

Как указано в ответах на предыдущий вопрос , команды не выполняются в оболочке, поэтому такие операции, как каналы и перенаправления, недоступны.

В this принятый ответ есть пример того, как вы можете сделать это, чтобы использовать перенаправление. Адаптированный к вашим потребностям Я считаю, что это должно быть примерно так:

- name: 'gcr.io/cloud-builders/curl'
  entrypoint: bash
  args: ['-c', 'bash <(curl -s https://codecov.io/bash) -t $_CODECOV_TOKEN']

Я не уверен, что вы сможете получить $_CODECOV_TOKEN оттуда, но это вариант, который вы должны попробовать.

Что касается вашей второй попытки, ошибка /dev/fd/63: option requires an argument -- t подсказывает мне, что значение в $_CODECOV_TOKEN не извлекается, и, таким образом, он жалуется на отсутствие значения в аргументе -t. Несмотря на это, в этом случае мне кажется странным, что /dev/fd/63 жалуется на это, поскольку не является исполняемым .

Возможно, жизнеспособным обходным решением было бы загрузить файл в ваш репозиторий и выполнить его оттуда. Я знаю, что таким образом загруженный скрипт не будет обновляться при каждом развертывании, но он будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...