在Gitlab CI Pipeline中触发另一个作业作为作业的一部分

时间:2020-09-30 13:42:24

标签: gitlab devops gitlab-ci

我正在为我的项目设置gitlab CI管道。到目前为止,它具有3个阶段-构建,构建异步和构建全部以及deploy_mode“ dev”。在构建阶段,将创建文件夹,部署zip。在build-async中,将发生所有异步事情,例如将工具包复制到aws s3存储桶,并且build-all本质上必须包括build + build-async阶段。假设已经在gitlab环境变量中设置了stage和deploy_mode环境变量。这是示例代码段-

stages:   
  -build    
  -build-async  
  -build-all
  
dev-build:  
  image: python:3.7.4-alpine3.9  
  script:   
    - echo "Hello from dev-build. "  
  stage: build  
  tags:   
    - docker  
    - linux  
  only:  
    variables:  
        - $stage =~ /^build$/ &&  $deployment_mode =~ /^dev$/  

dev-build-async:  
  image: python:3.7.4-alpine3.9  
  script:   
    - echo "Hello from dev-build-async. "  
  stage: build-async  
  tags:   
    - docker  
    - linux  
  only:  
    variables:  
        - $stage =~ /^build-async$/ &&  $deployment_mode =~ /^dev$/  

dev-build-all:  
  image: python:3.7.4-alpine3.9  
  script:   
    - echo "Hello from dev-build-all. "  
  stage: build-all  
  tags:   
    - docker  
    - linux  
  needs: ["dev-build", "dev-build-async"]  
  only:  
    variables:  
        - $stage =~ /^build-all$/ &&  $deployment_mode =~ /^dev$/  

我无法触发作业dev-build和dev-build-async作为dev-build-all的一部分。有谁知道如何同时触发它们?

在这种情况下,当我将阶段作为build-all和部署模式作为dev提供时,预期的输出

Hello from dev-build. 
Hello from dev-build-async. 
Hello from dev-build-all. 

1 个答案:

答案 0 :(得分:0)

<button id="btnSave" type="button" class="btn btn-secondary" onclick="SaveChanges">Save Changes</button> 在第三阶段,表示它是通过以下方式执行的:

dev-build-all-> dev-build-> dev-build-async

dev-build-all表示该作业仅在两个作业均成功后才运行。在这种情况下,默认情况下是这样,除非您需要工件,否则不需要needs:

为了从needs:触发dev-builddev-build-async,您应该将两个作业放在第三个作业之后的阶段。 (可选)在两者中都使用dev-build-all。无法调用上一个阶段。

示例:

needs: