iT邦幫忙

2025 iThome 鐵人賽

DAY 16
1
DevOps

GitLab CI 2025:深入玩轉流水線與實戰紀錄系列 第 16

Day16 - 在 CI/CD YAML 語法 needs 中取得父層流水線的 Artifact

  • 分享至 

  • xImage
  •  

接力上一篇的 needs,隨著專案的規模變大,有時候為了好除錯或降低複雜度,會採用 Parent - Child 形式的 GitLab Pipeline,但自然就會衍生一些問題,變數及Artifact的傳遞等。

那個,應該怎麼在 Child Pipeline 中,拿到 Parent Pipeline 特定 Job 的 Artifact 呢? 在不確定什麼版本的 GitLab 中,正式開始支援 needs:pipeline:job 的結構,可以直接在 Child Pipeline 的 Job 中直接宣告,所需要對應的 Pipeline 的那個 Job 的 Artifact。

如何使用

首先先建立子 Pipeline 的 CI/CD YAML,名稱為 child.yml

default:
  image: ubuntu:24.04

test-app:
  script: 
    - cat artifact.txt
    - echo "CI_PIPELINE_ID $CI_PIPELINE_ID"
    - echo "PARENT_PIPELINE_ID $PARENT_PIPELINE_ID"
  needs:
    - pipeline: $PARENT_PIPELINE_ID
      job: build-app

這邊的使用方式很直覺,透過 needs 中設定參數 pipeline 在正式執行時,帶入 Parent Pipeline ID,並設定所需要的 Job 即可。

.gitlab-ci.yml 中,則可以如下範例中實作,在 build-app 的工作中,建立需要的 artifact,在 trigger-child-pipeline 工作中,則負責觸發 child.yml 及帶入參數給 Child Pipeline,供 Child Pipeline 中知道,可以跟什麼 Pipeline 取得 Artifact:

  image: ubuntu:24.04

stages:
  - build
  - test

build-app:
  stage: build
  script: 
    - echo "sample artifact" > artifact.txt
    - echo "CI_PIPELINE_ID $CI_PIPELINE_ID"
    - echo "PARENT_PIPELINE_ID $PARENT_PIPELINE_ID"
  artifacts:
    paths: [artifact.txt]

trigger-child-pipeline:
  stage: test
  trigger:
    include: child.yml
    strategy: mirror
  variables:
    PARENT_PIPELINE_ID: $CI_PIPELINE_ID

使用上的限制

在使用 needs:pipeline:job 時,自然有一些限制,首先這邊使用的 Pipeline ID,不能是目前 Pipeline 的 ID,這限制是可以想像的,因為在目前的 Pipeline,其時就只需要直接使用 needs 即可,不用多這麼一層。
另外,被 Trigger 的 Pipeline 不能是 Project (Multi-project pipelines),如果真的要使用,則可以參考另外一個參數 needs:project 不過它是付費版本的。
最後是,所 needs 的 job,其完成狀態必須是 success 的狀態。(這個限制目前有可能解除,但還在討論中。)

總結

透過 needs:pipeline:job 的語法,Child Pipeline 可以直接宣告取得 Parent Pipeline 中特定 Job 其輸出的 Artifact 。雖然有一些使用上的限制,但比較大型的專案中,這此功能可以降低維護的複雜度,讓跨 Pipeline 的 Artifact 傳遞更直覺。我是墨嗓(陳佑竹),期待這次的內容能帶給你實用的啟發與幫助。

參考範例

參考連結


上一篇
Day15 - 在 CI/CD YAML 語法 needs 中選擇 parallel:matrix 工作相依
下一篇
Day17 - 讓 CI/CD YAML 的 needs 當 Job 存在的時候才 needs
系列文
GitLab CI 2025:深入玩轉流水線與實戰紀錄19
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言