Skip to content

demo1 将父流水线的 artifacts 传递给子流水线

关于 token

project1

yaml
create_artifacts:
  stage: demo
  when: manual
  artifacts:
    paths:
    - newfile.txt
    expire_in: 1 week
  script:
    - CHILD_PROJECT_ID=493
    - CHILD_REF_BRANCH_NAME=feature/cicd
    - echo "CI_JOB_ID:$CI_JOB_ID" >> newfile.txt
    - echo "CI_PIPELINE_ID:$CI_PIPELINE_ID" >> newfile.txt
    # 触发下游 native_lib 流水线, 并传递 PROJECT_ID 和 JOB_ID
    - curl --request POST --form "token=$CI_JOB_TOKEN"  --form "variables[PARENT_JOB_ID]=$CI_JOB_ID" --form "variables[PARENT_PROJECT_ID]=$CI_PROJECT_ID" --form ref=${CHILD_REF_BRANCH_NAME} "${CI_SERVER_HOST}/api/v4/projects/${CHILD_PROJECT_ID}/trigger/pipeline"

project2

yaml
download_upstream_artifacts:
  # variables:
  #   CI_DEBUG_TRACE: "true"
  stage: downstream_job
  # download upstream pipeline artifacts:
  needs:
    - pipeline: $PARENT_PIPELINE_ID
      job: create_artifacts
  # 限制仅通过父流水线触发时运行
  rules:
    - if: $CI_PIPELINE_SOURCE == "pipeline"
  script:
    - git config --global user.name "gitlab-ci"
    - git config --global user.email "gitlab-ci@mafeifan.com"
    - git config --global --add safe.directory "*"
    - mkdir -p ~/.ssh && chmod 700 ~/.ssh
    - ssh-keyscan ${CI_SERVER_HOST} >> ~/.ssh/known_hosts && chmod 644 ~/.ssh/known_hosts
    - cat "$SSH_PRIVATE_KEY" >  ~/.ssh/gitlab && chmod 500 ~/.ssh/gitlab
    - cat "$SSH_CONFIG" >  ~/.ssh/config

    - echo "下载 all_modules 流水线生成 so 文件"
    - echo $PARENT_PROJECT_ID
    - echo $PARENT_JOB_ID
    # 下载 artifacts
    # 会产生问题,因为 project1的流水线是先触发downstream才上传artifacts,这个时候取不到artifacts
    # 解决方法:使用外部OSS,不使用 artifact
    - curl --location --output artifacts.zip "${CI_SERVER_HOST}/api/v4/projects/${PARENT_PROJECT_ID}/jobs/${PARENT_JOB_ID}/artifacts?job_token=$CI_JOB_TOKEN"
    - unzip -o artifacts.zip

优化,支持传递 artifacts

project1

yaml
create_artifacts:
  stage: demo
  when: manual
  artifacts:
    paths:
    - newfile.txt
    expire_in: 1 week
  script:
    - CHILD_PROJECT_ID=493
    - CHILD_REF_BRANCH_NAME=feature/cicd
    - echo "CI_JOB_ID:$CI_JOB_ID" >> newfile.txt
    - echo "CI_PIPELINE_ID:$CI_PIPELINE_ID" >> newfile.txt
    # 触发下游 native_lib 流水线, 并传递 PROJECT_ID 和 JOB_ID

trigger_downstream:
  stage: deploy
  trigger: 
    include:
      - project: servicestickiness/stickiness_frontend/native_lib   # Path to the project to trigger a pipeline in
        ref: 'feature/mafei/cicd'
        file: '.gitlab-ci.yml'