Chr*_*her 5 code-coverage docker docker-build docker-multi-stage-build
在多阶段 docker 构建中,我执行单元测试,生成覆盖率报告并在构建阶段构建可执行文件,然后将可执行文件复制到运行阶段:
FROM golang:1.13 AS build-env
COPY . /build
WORKDIR /build
# execute tests
RUN go test ./... -coverprofile=cover.out
# execute build
RUN go build -o executable
FROM gcr.io/distroless/base:latest
COPY --from=build-env /build/executable /executable
ENTRYPOINT ["/executable"]
Run Code Online (Sandbox Code Playgroud)
如何cover.out在 Jenkins 环境中提取以发布覆盖率报告?
在 Docker 17.05 中,我所知道的唯一选项已发布:重构以使用运行命令和卷安装来运行该步骤,或者像您所做的那样,docker cp. 每个选项都需要使用该选项构建特定的构建目标--target,我怀疑这是您最初的问题。
使用 19.03 中的 BuildKit,可以选择构建除映像之外的其他内容。那看起来像:
# import code
FROM golang:1.13 AS code
COPY . /build
WORKDIR /build
# execute tests
FROM code as test
RUN go test ./... -coverprofile=cover.out
# execute build
FROM code as build
RUN go build -o executable
# add a stage for artifacts you wish to extract from the build
FROM scratch as artifacts
COPY --from test /build/coverage.xml /
COPY --from test /build/report.xml /
# and finally the release stage
FROM gcr.io/distroless/base:latest as release
COPY --from=build /build/executable /executable
ENTRYPOINT ["/executable"]
Run Code Online (Sandbox Code Playgroud)
那么你的构建命令如下所示:
mkdir -p artifacts
DOCKER_BUILDKIT=1 docker build -o type=local,dest=artifacts/. --target artifacts .
DOCKER_BUILDKIT=1 docker build -t myapp .
Run Code Online (Sandbox Code Playgroud)
重要的细节是--output或-o选项,指定 BuildKit 应如何处理生成的图像。默认情况下,它会导入回本地 docker 引擎。但在这种情况下,它将结果写入本地文件系统。
您应该使用 Docker Compose 文件运行测试,以便轻松以非交互方式提取输出,并将构建逻辑与管道的其余部分分开(更不用说它更快)。
您应该使用docker-compose.yml带有绑定安装的$PWD. 以下是上述 Docker Compose 文件的一个片段,它将把输出镜像到您的主机:
version: '3.7'
services:
app:
image: golang:1.13
command: go test ./... -coverprofile=cover.out
volumes:
- type: bind
source: .
target: /app
Run Code Online (Sandbox Code Playgroud)
现在可以像平常在 CI 管道中一样保存工件。
| 归档时间: |
|
| 查看次数: |
958 次 |
| 最近记录: |