在 google 云构建期间将 jest 代码覆盖率结果上传到 codecov
Upload jest code coverage results to codecov during google cloud build
我想知道如何将我的 jest 代码覆盖率报告上传到 codecov。
从那里 documentation:
bash <(curl -s https://codecov.io/bash) -t token
所以我尝试使用以下 cloudbuild.yaml
从云构建步骤 运行 bash 脚本
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"]
我收到以下错误:
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
当 运行 构建我的云时,codecov bash 上传器成功启动。但是,我无法上传到 clodecov 的报告。
这是来自 codecov bash 上传者的日志:
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: ['commit']
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: ['commit']
在搜索修复数字 2 时,我在 SO 上发现了以下内容:
答案似乎是 git 没有安装在我的容器中。
所以我尝试使用 docker:
制作自定义容器图像
Docker 文件:
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 .
并更新我的构建步骤以改用此图像:
- 姓名:"gcr.io/$PROJECT_ID/builder"
入口点:bash
参数:[]./scripts/codecov-upload.bash"]
但是使用用那个docker文件创建的图像returns同样的错误。
也许那个自定义镜像的 Dockerfile 不正确?或者我还缺少其他东西?
我的代码在 github 上可用:https://github.com/thdk/timesheets/tree/feat/112-1
如的回答所述,命令未在shell中执行,因此管道和重定向等操作不可用
在 中有一个关于如何使用重定向的示例。适应你的需求我相信应该是这样的:
- 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
抱怨 it isn't executable.
对我来说似乎很奇怪
也许一个可行的解决方法是将文件下载到您的存储库并从那里执行。我知道这样下载的脚本不会在您每次部署时都是最新的,但它会起作用。
在 , an answer on the community of codecov and looking into the source code of the codecov batch uploader 之后,我发现 bash 上传器需要一些环境变量才能工作。
我在 cloudbuild.yaml
中更改了我的构建步骤以包含环境变量。这些值包含在 default substition variables from google cloud build.
中
- 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
所以我不得不从 curl 图像开始使用我自己的构建图像并向其添加 git。
Docker 文件:
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'
我想知道如何将我的 jest 代码覆盖率报告上传到 codecov。 从那里 documentation:
bash <(curl -s https://codecov.io/bash) -t token
所以我尝试使用以下 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"]
我收到以下错误:
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
当 运行 构建我的云时,codecov bash 上传器成功启动。但是,我无法上传到 clodecov 的报告。
这是来自 codecov bash 上传者的日志:
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: ['commit']
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: ['commit']
在搜索修复数字 2 时,我在 SO 上发现了以下内容:
答案似乎是 git 没有安装在我的容器中。
所以我尝试使用 docker:
制作自定义容器图像Docker 文件:
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 .
并更新我的构建步骤以改用此图像:
- 姓名:"gcr.io/$PROJECT_ID/builder" 入口点:bash 参数:[]./scripts/codecov-upload.bash"]
但是使用用那个docker文件创建的图像returns同样的错误。
也许那个自定义镜像的 Dockerfile 不正确?或者我还缺少其他东西?
我的代码在 github 上可用:https://github.com/thdk/timesheets/tree/feat/112-1
如
在
- 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
抱怨 it isn't executable.
也许一个可行的解决方法是将文件下载到您的存储库并从那里执行。我知道这样下载的脚本不会在您每次部署时都是最新的,但它会起作用。
在
我在 cloudbuild.yaml
中更改了我的构建步骤以包含环境变量。这些值包含在 default substition variables from google cloud build.
- 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
所以我不得不从 curl 图像开始使用我自己的构建图像并向其添加 git。
Docker 文件:
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'