非同期サブパイプラインを使用してステージをトリガーする

非同期サブパイプラインを使用することで、 .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"

ステージをトリガーするために、ウェブフック・トリガーがウェブフック・シークレットで作成される。 ウェブフックのシークレットは パイプラインのパラメータと Subpipeline Webhook Trigger のプロパティの subpipeline-webhook-token にあります。 subpipeline-webhook-token の値の更新についての詳細は、 async stage webhooks の更新を 参照してください。

新しくトリガーされるパイプライン名はステージ名(例: my-custom-task )であるため、ステージ名が有効なパイプライン実行名であることを確認する。 ステージ名は、 Kubernetes リソースの名前またはIDを作成するために使用される。 Kubernetes、オブジェクト名とIDは RFC 1123 または RFC 1035に従わなければならない:

  • 最大63文字。
  • 小文字の英数字またはハイフン「-」のみを含む。
  • 英数字で始める。
  • 英数字で終わる。

非同期パイプラインにデータを渡す

ステージの実行に必要な変数を渡すことができます。 pipelinectl を使うことができる。

以下の手順で2つのパイプライン間でデータを渡すことができます:

  1. set_env を使って、非同期パイプラインをトリガーする前に変数を保存する。 これは、トリガーステージの前のパイプラインで起こりうることに注意。 set_env を2回使う必要はない。
  2. 変数を export_env でマークし、非同期パイプライン実行用にエクスポートします。
  3. エクスポート用にマークされた変数はすべて、非同期パイプラインで get_env
set_env <variable-name> <variable-value>
export_env <variable-name>
get_env <variable-name>

マークされた変数だけが、非同期パイプラインで使用できる。 データ量が多すぎたり、機密データが含まれている可能性があるため、すべてをエクスポートできるわけではない。

非同期パイプライン・コマンドのトリガー

ステージをトリガーするには、以下のコマンドを使用する:

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 と ツールを使用して)保存およびエクスポートされたすべてのリポジトリとアーティファクトは、新しいトリガー付き非同期パイプラインでも利用できます。 pipelinectlexport_env ツールを使って )保存されエクスポートされたすべてのリポジトリとアーティファクトは、新しいトリガー付き非同期パイプラインでも利用できます。 リポジトリは、前のパイプラインのコミットとともに、同じワークスペース関連フォルダにクローンされる。 パイプラインが同じ状態のリポジトリをクローンできるようにするには、リポジトリのコミットを pipelinectl に保存する必要があります。

リポジトリや成果物にアクセスするには list_repos そして list_artifacts. ビルドされたすべてのアーティファクトとクローンされたすべてのリポジトリを取得できます。 pipelinectl.

利用不可 すべてのワークスペースを新しいトリガーパイプライン実行に渡すことができないため、トリガーパイプライン実行の前のタスク(例えば、npm install)で行われたワークスペースの変更は利用できません。

トリガーされたパイプラインのステータスを照会する方法

APIカールコール

 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クリコール

ibmcloud dev tekton-pipelinerun [pipelineID] --run-id [pipelinerunID] [--output JSON]
ibmcloud dev tekton-pipelinerun ls [pipelineID]

詳細については、 IBM Cloud CLI(tekton-pipelinerun)コマンドを 参照してください。

CLIを使ったパイプラインのトリガーについては、 Using triggersを 参照してください