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

VIP*_*PAL 14 build-automation amazon-web-services gitlab gitlab-ci gitlab-ci-runner

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

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"
Run Code Online (Sandbox Code Playgroud)

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

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

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

谁能帮我实现这个?

Maf*_*for 19

严格执行您的要求是不可能的(据我所知),工作 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"
Run Code Online (Sandbox Code Playgroud)

管道

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