使用非同步子管道觸發階段
您可以透過使用 async 子管道,觸發任何新增至 .pipeline-config.yaml 設定檔的階段。 您不需要將這些階段內嵌加入管道,也不需要修改管道。
請參閱下列範例程式碼:
setup:
image: icr.io/continuous-delivery/pipeline/pipeline-base-image:2.12@sha256:ff4053b0bca784d6d105fee1d008cfb20db206011453071e86b69ca3fde706a4
script: |
#!/usr/bin/env bash
source "${ONE_PIPELINE_PATH}"/tools/trigger-task
set_env "variable-for-my-custom-task" "foo_bar"
export_env "variable-for-my-custom-task"
trigger-task "my-custom-task"
my-custom-task:
image: icr.io/continuous-delivery/pipeline/pipeline-base-image:2.12@sha256:ff4053b0bca784d6d105fee1d008cfb20db206011453071e86b69ca3fde706a4
script: |
#!/usr/bin/env bash
if [[ "$PIPELINE_DEBUG" == 1 ]]; then
trap env EXIT
env
set -x
fi
printf "Test custom stage to trigger async"
list_repos
list_artifacts
get_env "variable-for-my-custom-task"
為了觸發舞台,會使用 webhook 秘訣建立 webhook 觸發器。 webhook 秘密可在 Pipeline 參數 和 Subpipeline Webhook Trigger 的屬性中找到,如 subpipeline-webhook-token。 如需更新 subpipeline-webhook-token's
值的詳細資訊,請參閱 更新 async stage webhooks。
新觸發的管道名稱是階段名稱 (例如 my-custom-task),因此請確定階段名稱是有效的管道執行名稱。 階段名稱用於在 Kubernetes 資源上建立名稱或 ID。 Kubernetes 中的物件名稱和 ID 必須遵循 RFC 1123 或 RFC 1035:
- 最多包含 63 個字元。
- 只包含小寫字母數字字符或連字符 '-'。
- 以字母數字開頭。
- 以字母數字符號結束。
傳送資料到 async pipeline
您可以傳入執行階段所需的變數,並使用 pipelinectl 來處理。
您可以按照以下步驟在兩個管道之間傳遞資料:
- 在觸發 async 管道之前,使用
set_env來儲存變數。 請注意,這可能發生在觸發階段之前的管線中。 您不需要使用set_env兩次。 - 用
export_env標記變數,以輸出它供 async 管道執行。 - 在 async pipeline 中使用
get_env,就可以使用任何標記為匯出的變數。
set_env <variable-name> <variable-value>
export_env <variable-name>
get_env <variable-name>
在 async 管道中,只有標記的變數可用。 並非所有資料都可以匯出,因為資料可能過多或包含敏感資料。
觸發同步管道指令
使用下列指令觸發階段:
trigger-task <stage-name>
程式碼範例
setup:
image: icr.io/continuous-delivery/pipeline/pipeline-base-image:2.12@sha256:ff4053b0bca784d6d105fee1d008cfb20db206011453071e86b69ca3fde706a4
script: |
#!/usr/bin/env bash
source "${ONE_PIPELINE_PATH}"/tools/trigger-task
set_env "variable-for-my-custom-task" "foo_bar"
export_env "variable-for-my-custom-task"
trigger-task "my-custom-task"
此指令會從管道配置 yaml 觸發任務。 例如,trigger-task owasp-zap。
觸發管道中可存取的內容
在之前的管道中儲存和匯出(使用 set_env from pipelinectl 和 export_env 工具 )儲存和匯出的每個版本庫和工件,在新的觸發式同步管道中也是可用的。
套件庫會與前一個管道中的提交一起複製到相同的工作區相關資料夾。 儲存庫的提交必須保存在 pipelinectl 中,以便管道能夠複製相同狀態的儲存庫。
若要存取套件庫和工件,請使用 list_repos 和 list_artifacts. 您可以取得所有已建立的工件和所有已複製的套件庫,只是您必須將它們儲存在
pipelinectl.
不可用 在觸發管道執行的先前任務(例如 npm install)中對工作區所做的任何變更都不可用,因為我們無法將所有工作區傳入新的觸發管道執行中。
如何查詢觸發管道的狀態
API curl 呼叫
while [ "$STATE" = "running" -o "$STATE" = "waiting" -o "$STATE" = "queued" -o "$STATE" = "pending" ]; do
PIPELINE_STATUS=$(curl -s -k -X GET \
--header "Authorization: Bearer $IAM_ACCESS_TOKEN" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
$CD_PIPELINE_RUN_URL)
STATE=$(echo $PIPELINE_STATUS | jq -r '.status .state')
echo $STATE
sleep 10
done
ibmcloud cli 呼叫
ibmcloud dev tekton-pipelinerun [pipelineID] --run-id [pipelinerunID] [--output JSON]
ibmcloud dev tekton-pipelinerun ls [pipelineID]
如需詳細資訊,請參閱 IBM Cloud CLI(tekton-pipelinerun)指令。
有關使用 CLI 觸發管道的更多信息,請參閱 使用觸發器