我想将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上运行构建和测试。
答案 0 :(得分:62)
使用dependencies
。使用此配置测试阶段将下载在构建阶段创建的未跟踪文件:
build:
stage: build
artifacts:
untracked: true
script:
- ./Build.ps1
test:
stage: test
dependencies:
- build
script:
- ./Test.ps1
答案 1 :(得分:3)
由于默认情况下传递了所有先前阶段的工件,因此我们只需要以正确的顺序定义阶段即可。请尝试下面的示例,这可能有助于理解。
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
如果要在不同阶段的作业之间传递工件,我们可以使用依赖项和工件来传递工件,如document中所述
答案 2 :(得分:1)
如果您希望 foo/
在下一阶段可用并且它在您的 .gitignore
中,您需要在创建它的阶段中列出一个 artifact
,或者按照说明在 here 使用 untracked: true
,所以...这对我有用(后期没有 dependencies
)
artifacts:
paths:
- foo/
expire_in: 1 hour
顺便说一下:expire_in: 1 hour
部分:
我在 https://gitlab.com/gitlab-org/gitlab-runner/-/issues/2133 读到,无法让工件在管道结束时自动过期,并且默认保留时间长得惊人(默认为 30 天)-因此需要基于时间的杂乱来摆脱它们-请参阅{ {3}}