GitLab:多项目管道中的作业工件

Avi*_*Bis 5 pipeline gitlab gitlab-ci gitlab-api

我已经尝试学习多项目管道有一段时间了,除了 GitLab 文档之外,我还没有找到任何学习材料。如果我能看到一个例子,那真的会有帮助。我一直在项目 A 中的多项目管道中使用以下 ci 配置,但它不起作用:

trigger_job:
  stage: trigger_release  
  trigger:
    project: https://<gitlab-site>/api/v4/projects/<project-B-id>/trigger/pipeline
    branch: master
    strategy: depend
Run Code Online (Sandbox Code Playgroud)

这使得项目 A 中的管道永远处于挂起状态。我通过以下方式使用curl最终使配置工作:

trigger_job:
  stage: trigger_release 
  script:
    - curl --request POST --form "token=$CI_JOB_TOKEN" --form ref=master https://<gitlab-site>/api/v4/projects/<project-B-id>/trigger/pipeline
Run Code Online (Sandbox Code Playgroud)

然而,我真正需要的是在触发的作业完成后,在项目 A 管道中收集和使用项目 B 管道的工件。我怎么做?

mre*_*rek 0

从 Gitlab 11.8 开始。您不需要使用API​​来触发管道,请参阅官方文档

例子

让我们组成一个mygroup包含 2 个存储库的组:myrepository1myrepository2

存储库1中的配置

stages:
  - prepare-manifests
  - deploy

create-artifacts:
  stage: prepare-artifacts
  variables:
    COMMIT_FILE: build/commit_id.txt
  artifacts:
    name: some-artifacts
    when: always
    expire_in: 14 days
    paths:
      - "build/kubernetes/*"
      - "build/commit_id.txt"
  script:
    - echo "Creating artifacts"
    - ....

trigger-job:
  trigger:
    project: mygroup/myrepository2
    branch: master
  variables:
    VARIABLE_TO_PASS: $CI_COMMIT_REF_NAME
Run Code Online (Sandbox Code Playgroud)

存储库2中的配置

job-waiting-for-trigger:
  stage: deploy
  variables:
    REPOSITORY: user-profile/repository1
  script:
    - echo "Now I can use build/commit_id.txt"
  needs:
    - project: ${REPOSITORY}
      job: collect-all-manifests
      ref: $PARENT_REF_NAME
      artifacts: true
  only:
    - pipelines
Run Code Online (Sandbox Code Playgroud)