工件不会被拉入子管道中

use*_*695 5 gitlab gitlab-ci

这是我的 gitlab ci 配置。在构建阶段,应用程序在文件夹中构建dist,该文件夹存储为工件。下一个部署阶段是运行部署子管道的触发器。

但dist不会为子管道提取工件,因此子作业失败。

  1. 如何获取dist子作业中的工件?
  2. 即使子部署作业失败,父管道也会显示完整的通过。我希望看到至少有一个孩子失败了。

.gitlab-ci.yml

stages:
  - build
  - deployment

build:
  stage: build
  cache:
    key: ${CI_COMMIT_REF_SLUG}
    policy: pull
    paths:
      - node_modules/
  artifacts:
    when: always
    paths:
      - deployment.yml
      - dist/
  script:
    - node ./build-app.js # creates dist folder
    - node ./generate-pipeline.js # generates deployment.yml

trigger-deploy:
  stage: deployment
  trigger:
    include:
      - artifact: deployment.yml
        job: build
Run Code Online (Sandbox Code Playgroud)

部署.yml

stages:
  - deploy

app1-deploy:
  stage: deploy
  script:
    - ls dist # fails, as dist folder is not existing
Run Code Online (Sandbox Code Playgroud)

San*_*ani 11

我们可以在子管道作业中定义以从父管道作业中读取工件。

需要的第一个更改是在触发子管道时定义 PARENT_PIPELINE_ID

  variables:
    PARENT_PIPELINE_ID: $CI_PIPELINE_ID
Run Code Online (Sandbox Code Playgroud)

所以,你的代码将更改为

trigger-deploy:
  stage: deployment
  trigger:
    include:
      - artifact: deployment.yml
        job: build
  variables:
    PARENT_PIPELINE_ID: $CI_PIPELINE_ID
Run Code Online (Sandbox Code Playgroud)

现在在子管道中,您必须使用父管道 ID 和生成所需工件的作业。

这可以通过在子管道中添加以下内容来完成

  needs:
    - pipeline: $PARENT_PIPELINE_ID
      job: build
Run Code Online (Sandbox Code Playgroud)

因此,您的代码更改为

stages:
  - deploy

app1-deploy:
  stage: deploy
  script:
    - ls dist # fails, as dist folder is not existing
  needs:
    - pipeline: $PARENT_PIPELINE_ID
      job: build
Run Code Online (Sandbox Code Playgroud)

请参阅 GitLab 文档:https://docs.gitlab.com/ee/ci/yaml/#needspipelinejob


Mas*_*oob 0

“触发部署”作业需要“构建”作业的依赖关系,以允许提供工件。

要在子管道失败时让父管道失败,您需要向 include 添加一个策略strategy: depend。参见最后一个例子