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

时间:2016-07-01 08:49:07

标签: gitlab gitlab-ci

我想将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上运行构建和测试。

3 个答案:

答案 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

enter image description here

如果要在不同阶段的作业之间传递工件,我们可以使用依赖项工件来传递工件,如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}}