Docker 在谷歌云构建期间,将jest代码覆盖率结果上传至codecov

Docker 在谷歌云构建期间,将jest代码覆盖率结果上传至codecov,docker,jestjs,yaml,code-coverage,google-cloud-build,Docker,Jestjs,Yaml,Code Coverage,Google Cloud Build,我正试图弄清楚如何将我的jest代码覆盖率报告上传到codecov。 从那里: 我得到以下错误: Step #2: bash: <(curl -s https://codecov.io/bash): No such file or directory 并添加了codecov-upload.bash文件 我注意到日志中有两件事: 1. Step #3: /dev/fd/63: option requires an argument -- t 2. Step #3: missing requ

我正试图弄清楚如何将我的jest代码覆盖率报告上传到codecov。 从那里:

我得到以下错误:

Step #2: bash: <(curl -s https://codecov.io/bash): No such file or directory
并添加了codecov-upload.bash文件

我注意到日志中有两件事:

1. Step #3: /dev/fd/63: option requires an argument -- t
2. Step #3: missing required properties: [&#39;commit&#39;]
在搜索修复编号2时,我发现如下所示:

答案似乎是git没有安装在我的容器中

因此,我尝试使用docker制作自定义容器图像:

Dockerfile:

FROM gcr.io/cloud-builders/curl
RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y git
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\u ID/builder 入口点:bash args:[./scripts/codecov upload.bash] 但是使用该dockerfile创建的图像会返回相同的错误

可能该自定义图像的Dockerfile不正确?或者我错过了什么


我的代码可以在github上找到:

如a的答案中所述,命令不是在shell中执行的,因此管道和重定向等操作不可用

在中,有一个关于如何使用重定向的示例。适应您的需要我相信应该是这样的:

- name: 'gcr.io/cloud-builders/curl'
  entrypoint: bash
  args: ['-c', 'bash <(curl -s https://codecov.io/bash) -t $_CODECOV_TOKEN']
我不确定您是否能够从那里检索到$\u CODECOV\u令牌,但是您应该尝试一下这个选项

关于您的第二次尝试,error/dev/fd/63:选项需要一个参数-t建议我没有检索$\u CODECOV\u令牌中的值,因此它抱怨参数-t中缺少值。无论如何,在这种情况下,/dev/fd/63从那时起就抱怨这一点,我觉得很奇怪


也许一个可行的解决办法是将文件下载到存储库中并从那里执行。我知道,通过这种方式,下载的脚本不会在每次部署时都是最新的,但它会工作。

如a的答案中所述,命令不是在shell中执行的,因此管道和重定向等操作不可用

在中,有一个关于如何使用重定向的示例。适应您的需要我相信应该是这样的:

- name: 'gcr.io/cloud-builders/curl'
  entrypoint: bash
  args: ['-c', 'bash <(curl -s https://codecov.io/bash) -t $_CODECOV_TOKEN']
我不确定您是否能够从那里检索到$\u CODECOV\u令牌,但是您应该尝试一下这个选项

关于您的第二次尝试,error/dev/fd/63:选项需要一个参数-t建议我没有检索$\u CODECOV\u令牌中的值,因此它抱怨参数-t中缺少值。无论如何,在这种情况下,/dev/fd/63从那时起就抱怨这一点,我觉得很奇怪

也许一个可行的解决办法是将文件下载到存储库中并从那里执行。我知道,通过这种方式下载的脚本不会在每次部署时都是最新的,但它会工作。

之后,通过查看,我发现bash上传程序需要一些环境变量才能工作

我在cloudbuild.yaml中更改了构建步骤,以包含环境变量。这些值包含在中

因此,我必须从curl图像开始使用自己的构建图像,并向其中添加git

Dockerfile:

FROM gcr.io/cloud-builders/curl
RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y git
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文件是:

之后,我发现bash上传程序需要一些环境变量才能工作

我在cloudbuild.yaml中更改了构建步骤,以包含环境变量。这些值包含在中

因此,我必须从curl图像开始使用自己的构建图像,并向其中添加git

Dockerfile:

FROM gcr.io/cloud-builders/curl
RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y git
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文件是:


谢谢你的回复,我会尽快试用$_CODECOV_令牌是从我在google cloud build中的构建触发器设置中注入的替换变量。但是,在编写脚本时运行该脚本可以正常工作,但我遇到的错误与使用自己的CODECOV-upload.bash脚本时的错误相同。我想我现在已经明白了,我已经试着把我的答案写在下面。谢谢你的回复,我会尽快尝试的$_CODECOV_令牌是从我在google cloud build中的构建触发器设置中注入的替换变量。但是,在编写脚本时运行该脚本可以正常工作,但我遇到的错误与使用自己的CODECOV-upload.bash脚本时的错误相同。我想我现在已经弄明白了,我试着把我的答案写在下面。这是一个令人惊讶和有用的答案。它肯定会帮助其他人,不要忘记在问题产生48小时后接受它!这是一个令人惊讶和有益的答案。它肯定会帮助其他人,不要忘记在问题产生48小时后接受它!
docker build -t "gcr.io/[PROJECT_ID]/builder .
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'