Gitlab CI 管道在同一阶段并行运行作业并调用/触发同一阶段的其他作业

问题描述 投票:0回答:1

我正在尝试创建一个用于数据加载的自动化管道。我有一个如下解释的场景:

stages
 - stage1
 - stage2

job1:
  stage: stage1
  script:
  - echo "stage 1 job 1"


job2:
  stage: stage1
  script:
   - echo "stage 1 job 2"

job3:
  stage: stage1
  script:
   - echo "stage 1 job 3"

job4:
  stage: stage1
  script:
   - echo "stage 1 job 4"

我想在同一阶段并行运行job1和job2。所以,在Job1和job2成功之后

  • job1 将调用/触发 job3。这意味着当 job1 成功时,job3 将自动启动
  • job2将调用/触发job4,这意味着当job2成功时,job4将自动启动

我正在 .gitlab-ci.yml 中编写管道。

有人可以帮我实现这个吗?

amazon-web-services gitlab gitlab-ci build-automation gitlab-ci-runner
1个回答
17
投票

严格执行您的要求是不可能的(据我所知),工作 3 和 4 需要处于单独的阶段(尽管计划支持将它们放在同一阶段)。需要明确的是:可以满足其他功能要求,即:

    job1 和 job2 并行启动
  • job1将触发job3(立即,无需等待job2完成)
  • job2将触发job4(立即,无需等待job1完成)
关键是使用

needs 关键字将 pipieline 转换为 有向无环图:

stages: - stage-1 - stage-2 job-1: stage: stage-1 needs: [] script: - echo "job-1 started" - sleep 5 - echo "job-1 done" job-2: stage: stage-1 needs: [] script: - echo "job-2 started" - sleep 60 - echo "job-2 done" job-3: stage: stage-2 needs: [job-1] script: - echo "job-3 started" - sleep 5 - echo "job-3 done" job-4: stage: stage-2 needs: [job-2] script: - echo "job-4 started" - sleep 5 - echo "job-4 done"

正如您在屏幕截图中看到的,作业 3 已启动,尽管作业 2 仍在运行。

© www.soinside.com 2019 - 2024. All rights reserved.