我如何将工件传递到另一个阶段?

我想使用GitLab CI和。GitLab - CI。Yml文件使用单独的脚本运行不同的阶段。第一阶段生成一个工具,必须在后面的阶段中使用该工具来执行测试。我已经将生成的工具声明为工件。

现在如何在后期作业中执行该工具呢?正确的路径是什么,它周围会有什么文件?

例如,第一阶段构建工件/bin/TestTool/TestTool.exe,该目录包含其他必需的文件(dll和其他文件)。我的.gitlab-ci。Yml文件是这样的:

releasebuild:
script:
- chcp 65001
- build.cmd
stage: build
artifacts:
paths:
- artifacts/bin/TestTool/


systemtests:
script:
- chcp 65001
- WHAT TO WRITE HERE?
stage: test

构建和测试在Windows上运行(如果相关的话)。

218882 次浏览

使用dependencies。使用这个配置测试阶段将下载在构建阶段创建的未跟踪文件:

build:
stage: build
artifacts:
untracked: true
script:
- ./Build.ps1


test:
stage: test
dependencies:
- build
script:
- ./Test.ps1

由于默认情况下传递了所有前阶段的工件,我们只需要按正确的顺序定义阶段。请尝试下面的例子,这可能有助于理解。

image: ubuntu:18.04


stages:
- build_stage
- test_stage
- deploy_stage


build:
stage: build_stage
script:
- echo "building..." >> ./build_result.txt
artifacts:
paths:
- build_result.txt
expire_in: 1 week


unit_test:
stage: test_stage
script:
- ls
- cat build_result.txt
- cp build_result.txt unittest_result.txt
- echo "unit testing..." >> ./unittest_result.txt
artifacts:
paths:
- unittest_result.txt
expire_in: 1 week


integration_test:
stage: test_stage
script:
- ls
- cat build_result.txt
- cp build_result.txt integration_test_result.txt
- echo "integration testing..." >> ./integration_test_result.txt
artifacts:
paths:
- integration_test_result.txt
expire_in: 1 week


deploy:
stage: deploy_stage
script:
- ls
- cat build_result.txt
- cat unittest_result.txt
- cat integration_test_result.txt

enter image description here

如果要在不同阶段的作业之间传递工件,我们可以使用依赖关系工件来传递工件,如文档中所述。

还有一个更简单的例子:

image: ubuntu:18.04


build:
stage: build
script:
- echo "building..." >> ./result.txt
artifacts:
paths:
- result.txt
expire_in: 1 week


unit_test:
stage: test
script:
- ls
- cat result.txt
- echo "unit testing..." >> ./result.txt
artifacts:
paths:
- result.txt
expire_in: 1 week


deploy:
stage: deploy
script:
- ls
- cat result.txt

如果你想让foo/在下一个阶段可用,并且它在你的.gitignore中,你需要在创建它的阶段的artifacts中列出它,或者像在这里中解释的那样使用untracked: true

这对我有用(在接下来的阶段中没有dependencies)

   artifacts:
paths:
- foo/
expire_in: 1 hour

BTW关于:expire_in: 1 hour部分:
. BTW 我在https://gitlab.com/gitlab-org/gitlab-runner/-/issues/2133读到,没有办法让工件在管道结束时自动过期,默认保留时间惊人地长(默认为30天)-因此基于时间的拼凑来摆脱它们-见https://docs.gitlab.com/ee/ci/yaml/