Gitlab CI 多项目管道

mai*_*air 4 gitlab gitlab-ci gitlab-ci-trigger

在 Gitlab 中,我试图从父管道触发子管道。子管道位于同一项目的子目录下。但是,在合并请求事件时触发时,它会给出错误“无法创建下游管道,该管道没有阶段/作业

文件夹结构:

  • 命名空间/Project/.gitlab-ci.yml(父管道)
  • 命名空间/Project/servicename/.gitlab-ci.yml(子管道)

父管道:

trigger_servicename:
 stage: triggers  
  rules:        
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "dev"'
      changes: 
        - app-notifier/*      
      when: always  
  trigger:
    include: servicename/.gitlab-ci.yml    
    strategy: depend     
Run Code Online (Sandbox Code Playgroud)

子管道:

image:

    name: registry.gitlab.com/who-docker/aws-cli:latest

    entrypoint: 
      - /usr/bin/env
      - 'PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
stages:  
  -build
build:
  stage: build                 
  script:    
    - echo "run build..."
        
test:
  stage: test                 
  script:             
    - echo "run test...."
Run Code Online (Sandbox Code Playgroud)

Mic*_*Osl 28

通常,当没有与子管道中的任何作业匹配的规则时,您会收到错误消息“无法创建下游管道,此管道没有阶段/作业”。来自上游管道的规则将在子管道中继承。

查看您的示例,该规则if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "dev"'继承到子管道。此规则在子管道中不匹配,因为$CI_PIPELINE_SOURCE在子管道中是trigger,而不是来自上游管道的规则。因此,没有可供 gitlab 执行的作业。

如果你添加

workflow:
  rules:
    - when: always
Run Code Online (Sandbox Code Playgroud)

对于你的孩子管道它会起作用。如果需要,相应地修改规则。

  • 这其实很可笑,为什么当你故意包含一个规则来执行时它会自动继承它。就像您实际上可以在触发器作业上设置一条规则来说明何时应该执行子作业一样,不需要任何进一步的规则 (3认同)