Gitlab 将值从子管道传递到父管道

Gitlab pass values from child pipeline to parent pipeline

我有一个 monorepo,每个包都应该构建为 docker。当所有更改包 dockerized 我想部署然后使用 helmfile

我为触发子管道的每个包创建了一个触发作业。

我正在寻找一种方法来获取子管道中生成的值,例如父管道中的 docker 标记或图表版本。

我需要这些值到所有子管道完成后发生的部署阶段。

.gitlab-ci.yml

---
trigger-package-a:
  stage: build
  trigger:
    include: .gitlab/ci/packages/package-gitlab-ci.yml
    strategy: depend
  rules:
   - changes:
      - "packages/package-a/**/*"
  variables:
    PACKAGE: package-a

trigger-package-b:
  stage: build
  trigger:
    include: .gitlab/ci/packages/package-gitlab-ci.yml
    strategy: depend
  rules:
    - changes:
      - "packages/package-b/**/*"
  variables:
    PACKAGE: package-b

done_job:
  stage: deploy
  script:
    - "echo DONE"
    - "cat config.json"
stages:
  - build
  - deploy

package-gitlab-ci.yml

stages:
  - bootstrap
  - validate

cache:
  key: "${PACKAGE}_${CI_COMMIT_REF_SLUG}"
  paths:
    - packages/${PACKAGE}/node_modules/
  policy: pull

install-package:
  stage: bootstrap
  script:
    - echo ${PACKAGE}}
    - echo '{"package":${PACKAGE}}' > config.json
    - "cd packages/${PACKAGE}/"
    - yarn install --frozen-lockfile
  artifacts:
    paths:
      - config.json
  cache:
    key: "${PACKAGE}_${CI_COMMIT_REF_SLUG}"
    paths:
     - packages/${PACKAGE}/node_modules/
    policy: pull-push

lint-package:
  script:
   - yarn lint
  stage: validate
  needs: [install-package]
  before_script:
   - "cd packages/${PACKAGE}/"

我只能通过 GitLab 获取工件来获取值和文件 CI API

previous - 为您的用户 Gitlab 创建令牌并 创建 var GITLAB_USER_TOKEN

done_job:
  image: nexus/docker-images/ansible:2.9.24-9
  stage: done_job
  script:
    - yum install -y unzip 
    - >
        export CI_CHILD_PIPELINE_ID=$(curl --header "PRIVATE-TOKEN: $GITLAB_USER_TOKEN" "$CI_API_V4_URL/projects/$CI_PROJECT_ID/pipelines/$CI_PIPELINE_ID/bridges" | jq ".[].downstream_pipeline.id")
    - echo $CI_CHILD_PIPELINE_ID
    - >
        export CI_CHILD_JOB_ID=$(curl --header "PRIVATE-TOKEN: $GITLAB_USER_TOKEN" "$CI_API_V4_URL/projects/$CI_PROJECT_ID/pipelines/$CI_CHILD_PIPELINE_ID/jobs" | jq '.[].id')
    - echo $CI_CHILD_JOB_ID 
    - 'curl --output artifacts.zip --header "PRIVATE-TOKEN: $GITLAB_USER_TOKEN" "$CI_API_V4_URL/projects/$CI_PROJECT_ID/jobs/$CI_CHILD_JOB_ID/artifacts"'
    - unzip artifacts.zip
    - "echo DONE"
    - "cat config.json"
    - rm -rf artifacts.tar