Tekton パイプラインの操作

DevOps Insights 2026年8月31 日にサービス終了となり、提供が中止されます。 Continuous Delivery は、2027年2月12日に以下のリージョンで提供が中止されます: au-sydca-torus-east。 また、同日をもって、Code Risk Analyzerもすべての地域で提供を終了いたします。 あるリージョンでこれらの機能が実際に利用されていない場合、そのリージョンにおける機能は早期に提供終了となり、新しいインスタンスの受け入れが停止される可能性があります。 詳細はこちら

Tekton Pipelines は、 Kubernetes クラスタ内で継続的インテグレーション(CI)および継続的デリバリー( Continuous Delivery )パイプラインを設定・実行するために利用できるオープンソースプロジェクトです。 Tekton パイプラインは、yaml ファイルで定義されます。このファイルは一般には Git リポジトリーに保管されます。

ハイブリッドTekton
*ハイブリッドTektonパイプラインダイアグラム

Tektonは、パイプラインを定義するために、 Kubernetes 向けの一連の カスタムリソース拡張機能を提供しています。 これらの拡張には、以下の基本的な Tekton パイプラインのリソースが含まれています。

テクトンパイプラインリソース
リソース 説明
Task コードのコンパイル、テストの実行、イメージのビルドとデプロイなどの一連のビルド・ステップを定義します。
TaskRun 特定の入力、出力、および実行パラメーターを使用して実行する Task をインスタンス化します。 タスクは、単独で開始することも、パイプラインの一部として開始することもできます。
Pipeline パイプラインを構成する一連のタスクを定義します。
PipelineRun 特定の入力、出力、および実行パラメーターを使用して実行する Pipeline をインスタンス化します。

Tekton パイプラインを使用する場合は、以下の機能を利用できます。

  • クラウド・ネイティブ: Tekton パイプラインは Kubernetes 上で実行され、Kubernetes クラスターを最初のクラス・タイプとして使用し、コンテナーをビルディング・ブロックとして使用します。
  • 分離: 1 つのパイプラインを使用して、任意の Kubernetes クラスターにデプロイできます。 1 つのパイプラインを構成している各タスクを分離して実行できます。 また、パイプラインの実行ごとにリソース (Git リポジトリーなど) を切り替えることができます。
  • タイプ付き: 特定のタイプのリソース (イメージなど) 用に実装を切り替えることができます。

Tekton パイプライン・プロジェクトはベータ版リリースです。 Tekton のバージョンが新しくなるたびにパイプラインを更新する必要があります。 Tektonの最新バージョンに関する詳細については、以下を参照してください https://github.com/tektoncd/pipeline/releases

IBM Cloud® Continuous Delivery には、アプリケーションのビルド、テスト、およびデプロイに使用できる 2 つのタイプのデリバリー・パイプラインが用意されています。

  • Classic: Classic デリバリー・パイプラインは、パイプライン・ダイアグラムに状況を埋め込まれた形でグラフィカルに作成されます。 このタイプのパイプラインは、クラウド内の共有ワーカーでも、独自の Kubernetes クラスターで稼働するプライベート・ワーカーでも実行できます。
  • Tekton: Tekton デリバリー・パイプラインは、パイプラインを Kubernetes リソースのセットとして定義する yaml ファイル内に作成されます。 これらのYAMLファイルを編集することで、パイプラインの動作を変更することができます。 Tekton パイプラインは、お客様独自のクラスターで稼働するプライベート・ワーカーで実行できます。 また、パブリッククラウドの IBM 管理ワーカーでも実行できます。 Tekton 統合機能には、Tekton パイプラインの実行状況を確認したり、新しい実行をトリガーしたりできるダッシュボードが用意されています。 また、パイプライン・トリガー、パイプライン定義、パイプラインが実行されるワーカー、およびパイプライン・プロパティーを指定するためのメカニズムも提供します。

どちらのタイプのパイプラインでも、ジョブまたはステップを、別々のコンテナーで実行し、選択したイメージを使用することで個々に分離することができます。 Classic パイプラインと Tekton パイプラインは、いずれも ツールチェーン内に存在し、ビルド、テスト、デプロイのプロセスで使用されるその他のツールとの統合を追加するには、そのツールチェーンに依存しています。

2020 年 11 月 20 日に、Dockerhub は匿名イメージ・プルに速度制限を導入しました。 この変更は、Dockerhub をホストとするイメージを参照するタスクを実行するユーザーに影響する可能性があります。 IBM Cloud Container Registry などの代替レジストリーを使用することが推奨されています。

前提条件

Tekton パイプラインを追加して実行する前に、以下のリソースを用意してください。

  • 以下のツール統合が含まれているツールチェーン

    • Tekton yaml ファイルなどの Tekton パイプライン・コードを含むリポジトリー・ツール統合 (GitHub ツール統合など)。 パイプラインおよびタスクの定義例については、 GitHub。 Tektonパイプラインの開始方法に関する詳細については、「 Tektonパイプライン 」を参照してください。
    • オプション。 デフォルトの共有パイプライン・ワーカーを使用していない場合、Kubernetes クラスターを参照する Delivery Pipeline プライベート・ワーカーのツール統合を使用できます。 プライベート・ワーカーについて詳しくは、Delivery Pipeline プライベート・ワーカーのインストールを参照してください。
  • ローカルにインストールされた IBM Cloud CLI

  • kubectl がローカルにインストールされている。

  • Kubernetes クラスター (バージョン 1.22 以上)。例えば、 IBM Cloud® Kubernetes Service クラスターなど。

ツールチェーンと Delivery Pipeline プライベート・ワーカーのツール統合は同じリージョンになければなりません。

コンソールを使用した Tekton 用の Delivery Pipeline の作成

Delivery Pipeline ツール統合を構成するときに、作成するパイプラインのタイプを選択できます。

  1. ツールチェーンをお持ちでない場合は、テンプレートを選択して ツールチェーンを作成してください。 使用するテンプレートに応じて、使用できるフィールドは異なります。 デフォルトのフィールド値を確認し、必要に応じてそれらの設定を変更します。

  2. ツールチェーンをお持ちで、そこにこのツールの統合を追加する場合は、 IBM Cloud コンソールで、 メニュー アイコン( ハンバーガーアイコン ) > [Platform Automation ] > [Toolchains ] の順にクリックしてください。 「 ツールチェーン」ページで、ツールチェーンをクリックして、その「概要」ページを開きます。

  3. デリバリー・パイプライン統合をツールチェーンに追加します。

    a. **「ツールの追加」**をクリックします。

    b. 「ツール統合」セクションで**「Delivery Pipeline」**をクリックします。

  4. 新しいパイプラインの名前を指定します。

  5. **「Tekton」**を選択して Tekton Delivery Pipeline を作成します。 定義済みの Kubernetes クラスター上で、Tektonパイプラインの実行出力を確認できます。パイプライン定義のリポジトリ、パイプラインのトリガー、パイプラインの実行場所、および簡易シークレットの設定に対応しています。

  6. パイプラインを使用してユーザー・インターフェースをデプロイするよう計画している場合は、**「アプリケーションの表示メニューでアプリケーションを表示する (Show apps in the View app menu)」チェック・ボックスを選択します。 パイプラインが作成するすべてのアプリケーションが、ツールチェーンの「概要」ページの「アプリケーションの表示 (View App)」**リストに表示されます。

  7. **「統合の作成」**をクリックして、Delivery Pipeline をツールチェーンに追加します。

コンソールを使用した Tekton 用の Delivery Pipeline の構成

  1. ツールチェーンの「概要」ページにある「 デリバリーパイプライン 」カードで、 Delivery Pipeline をクリックして、Tektonの「 Delivery Pipeline 」概要ページを開きます。

  2. 「設定」 をクリックします。 **「定義」**セクションで、以下のタスクを実行します。

    a. Tekton パイプライン定義および関連する成果物が含まれている Git リポジトリーおよび URL を指定します。 リポジトリーが使用できない場合は、ツールチェーンの「概要」ページに戻り、リポジトリーを追加します。

    b. 使用する Git リポジトリー内のブランチを選択するか、タグを入力します。

    c. Git リポジトリー内のパイプライン定義のパスを指定します。 同じリポジトリー内にある特定の定義を参照できます。 ツールチェーンと統合されている場合は、複数の定義リポジトリーを追加することもできます。

    d. 変更内容を保存します。

    パイプライン定義は自動的に更新されます。

    計算されたパイプライン定義のサイズ制限は 1 MB です。 パイプラインを保存または実行するときにエラーが発生した場合は、パイプライン定義のサイズを小さくするか、複数のパイプラインに分割する必要があります。

  3. **「ワーカー (Worker)」**セクションで、Tekton パイプラインを実行するために使用する IBM 管理の共有ワーカーまたはプライベート・ワーカーを選択します。 プライベート・ワーカーについて詳しくは、Delivery Pipeline プライベート・ワーカーの操作を参照してください。

    プライベート・ワーカーは、Tekton パイプラインと同じツールチェーンに定義されていなければなりません。

  4. 「環境プロパティー」 セクションで、「追加」 をクリックし、独自の環境プロパティーを定義するプロパティー・タイプを選択します。 例えば、API_KEY プロパティーを定義して、パイプライン内のすべてのスクリプトで IBM Cloud リソースにアクセスするときに使用する API キーを渡すことができます。 以下のタイプのプロパティーを追加できます。

    • 列挙 (Enumeration): ユーザー定義のオプションのリストから選択できる値を持つプロパティー・キー。
    • セキュア値 (Secure value): AES-128 暗号化で保護された単一行の値を持つプロパティー・キー。 この値は、アスタリスク文字を使用して表示されます。 あるいは、鍵アイコンをクリックして、ボールト統合 (IBM Key Protectなど) からシークレットを選択することもできます (そのようなツールがツールチェーンで使用可能な場合)。
    • テキスト値 (Text value): 単一行または複数行のテキスト値を持つプロパティー・キー。 以前は、複数行の値は別のテキスト域 (Text area) プロパティー・タイプでサポートされていました。
    • ツール統合 (Tool integration): 実行時にツールチェーンのツール統合から解決される値を持つプロパティー・キー。 デフォルトでは、値はツール統合の JSON ストリング表現です。 オブジェクトの特定のフィールドまたはサブセットは、オプションの JSON フィルターに値を指定して取得できます。 例えば、GitHub 統合が選択されていて、JSON フィルター parameters.repo_url が指定されている場合、値は、PipelineRun リソースの実行時にツール統合で構成される Git リポジトリーの URL を表します。

    Tekton パイプラインのリソースの中で、これらのプロパティーにアクセスすることができます。 これらのプロパティーの詳細については、Tekton の環境とリソースを参照してください。

    プロパティーをロックして、オーバーライドされないようにすることができます。 ロックされたプロパティーを実行時にオーバーライドしようとすると、実行要求が拒否されます。 ロックされたプロパティーは、デフォルトでは実行サイド・パネルに表示されませんが、「すべてのプロパティーを表示」オプションを有効にすることで読み取り専用で表示できます。

  5. 保存 をクリックします。

  6. 「パイプラインの概要」ページで、「 追加 」をクリックしてトリガーを作成し、追加するトリガーの種類を選択して、そのトリガーをイベントリスナーに関連付けます。 使用可能なイベント・リスナーのリストには、パイプライン・コード・リポジトリーで定義されているリスナーが含まれています。

    トリガーは、 Tektonのトリガー定義に基づいています。 Git repoトリガーは、自身にマッピングされたイベントリスナーを使用して、受信したイベントのペイロードから情報を抽出し、 Kubernetes リソースを作成します。 これらのリソースは、Tekton PipelineRun リソースに適用されます。

    トリガーされたパイプライン実行は、Limit concurrent runs オプションを使用して実行をシリアライズするようにトリガーを構成しない限り、並行して実行されます。 このオプションを有効にすると、このトリガーによって開始できる同時実行の数を制限できます。 たとえば、上限が 1 に設定されている場合、このトリガーに対するパイプラインの実行は一度に 1 つだけ行われ、それ以外のものは「待機中」の状態としてキューに入れられます。 最大20件の実行( IBM のマネージドワーカーを使用している場合は5件)が待機状態でキューに入れられた後、それ以降のリクエストは自動的にキャンセルされます。 IBM のマネージドワーカーを使用する場合、デフォルトでは、すべての「タイムド」トリガーの同時実行数は1つに制限されます。

    トリガーが同時実行の制限を超えると、キャパシティが利用可能になるまで、新しいパイプラインの実行は "Waiting "状態に置かれる。 必要であれば、この動作を変更し、直近のランだけを "Waiting "状態にし、他のランは自動的にキャンセルされるようにすることもできる。 例えば、短時間に複数回トリガーされた場合に最新のコミットのみをビルドしたい場合 Git などに、この機能は有用です。 この機能を有効にするために、"Limit to one waiting run "トグルがトリガー設定パネルで利用可能であり、 limit_waiting_runs プロパティを使用してAPI経由で設定することもできます (APIドキュメントを参照 )。 この設定は「待機中」のランにのみ適用され、アクティブなランには影響しないことに注意してください。

    手動トリガーは、**「実行」**パイプライン・ボタンをクリックしてトリガーを選択した場合に実行されます。

    Git リポジトリー・トリガーは、指定した Git リポジトリーおよびブランチで、指定した Git イベント・タイプが発生した場合に実行されます。

    Tekton パイプライン・リソースから Git トリガーに送達された Web フック・ペイロードにアクセスできます。 正確なフィールドはリポジトリーによって異なりますが、Web フック・ペイロードの一般的な構文は $(event.payloadFieldName) です。 Web フックを作成する前に、対応する Git 統合に対する Git 管理アクセスを許可する必要があります。 Git 管理アクセスを許可するには、再度 Git 統合を構成して保存します

    時間指定トリガーはCRON 値で定義されたスケジュールされた時刻に実行されます。 時間指定によるトリガー用の CRON式は、 UNIXのcrontab構文に基づいており、 minutehourday of the monthmonthday of the week という5つの日時フィールドの組み合わせで構成されています。 これらのフィールドは、 X X X X X の形式でスペースで区切られます。 時限トリガーの最大頻度は、5 分に 1 回です。 以下の例は、さまざまな時間指定の頻度を使用する文字列を示しています。

    • */5 * * * * - 5 分毎にトリガーを実行します。
    • 0 * * * * - 毎時 0 分にトリガーを実行します。
    • 0 9 * 1 MON-FRI - 1 月の毎週月曜から金曜まで午前 9:00 にトリガーを実行します。
    • 0 * * NOV,DEC 1 - 11 月と 12 月の月曜に毎時トリガーを実行します。

汎用 Web フック・トリガーは、シークレットの設定で構成された POST 要求が汎用 Web フック URL に送信されると実行されます。 汎用 Web フック・トリガーは、POST 要求に対して固有の Web フック URL を提供します。

PipelineRun UI は、イベント・ペイロード・セクションの汎用 Web フック・ペイロード値を非表示にしないため、ペイロードには機密データを含めないでください。 代わりに、パスワードまたは API キー・シークレットなどのトリガー・プロパティーを使用して、汎用 Web フックに必要なデータを保護してください。

次のいずれかのメソッドを使用して、Git、Slack Outgoing Web フック、Artifactory Web フックなどと連携する、汎用 Web フック・トリガーを保護できます。

  • 保存されたトークンと POST 要求内で渡されるトークンを比較する、トークンの突き合わせ。 サポートされるトークン・ソースには、ヘッダー、クエリー、またはペイロードが含まれます。 トークンの突き合わせは、GitLab Web フックおよび Slack Outgoing Web フックで使用されます。
  • HMAC 16 進数ダイジェストを保存されたトークンと一緒に使用して、ダイジェストされたペイロードから生成されたハッシュと署名とを比較する、ペイロード・ダイジェストの突き合わせ。 サポートされる署名ソースには、ヘッダー、クエリー、またはペイロードが含まれることがあります。 ユーザーはダイジェスト・アルゴリズムを指定する必要があります。 ペイロード・ダイジェストの突き合わせは、GitHub Web フックで使用されます。
  • Tekton タスク検証では、ユーザーがその Tekton タスク内の Web フック要求を検証する必要があります。

汎用 Web フック・トリガーを GitHub Web フックで使用するには、以下の値を指定します。

  • 保護: Payload Digest Matches
  • 署名ソース: Header
  • ヘッダー・キー名: X-Hub-Signature
  • ダイジェスト・アルゴリズム: sha1

汎用 Web フック・トリガーを GitLab Web フックで使用するには、以下の値を指定します。

  • 保護: Token Matches
  • トークン・ソース: Header
  • ヘッダー・キー名: X-Gitlab-Token

汎用 Web フック・トリガーを Slack Outgoing Web フックで使用するには、以下の値を指定します。

  • 保護: Token Matches
  • トークン・ソース: Payload
  • JSON プロパティー名 / フォーム・キー: token

次の例は、Token Matches ルールで保護されている汎用 Web フックで curl コマンドを使用する方法を示しています。

  ![一般的なWebhookの例*一般](images/pipeline_tekton_generic_webhook.png){: caption="なWebhookの例" caption-side="bottom"}
curl -X POST \
https://devops-api.us-south.devops.cloud.ibm.com/v1/tekton-webhook/588236be-749b-4c67-ae57-a561abbbc9a8/run/7e82880e-4223-4c98-8ca9-ef6df36bb6dc \
-H 'Content-Type: application/json' \
-H 'token: 48a0f92c0932890048596906a22ae189c48c5619fbcf9600' \
-d '{
"somekey": "somevalue"
}'

パイプライン定義でペイロード値を取得するには、イベントから派生した値で Triggerbinding パラメーターを指定します。

apiVersion: tekton.dev/v1beta1
kind: TriggerBinding
metadata:
name: binding
spec:
params:
- name: somekey
value: $(event.somekey)

変更内容を保存します。

さらに、一般的な Webhook トリガーは、Webhook リクエストのボディにプロパティを渡すことができます。 これにより、ウェブフックによってトリガーされる PipelineRun に対してプロパティをオーバーライドしたり、 PipelineRun で使用されるパイプライン/トリガーのプロパティを補足する追加のプロパティを渡したりすることができます。

パスワードやAPIキーの秘密など、機密データをペイロードプロパティに渡す必要がある場合、UIにプレーンテキストで表示されないように、そのようなプロパティにはプロパティタイプ SECURE を使用する必要があります。

さらに、トリガーされた PipelineRun、ブラウザで PipelineRun の詳細を見るときにUIに表示される を説明するオプションの説明をリクエストボディに渡すことができる。

次の例は、text プロパティ、secure プロパティ、および description を渡しながら、一般的な Webhook で curl コマンドを使用する方法を示しています:

curl -X POST \
https://devops-api.us-south.devops.cloud.ibm.com/v1/tekton-webhook/588236be-749b-4c67-ae57-a561abbbc9a8/run/7e82880e-4223-4c98-8ca9-ef6df36bb6dc \
-H 'Content-Type: application/json' \
-H 'token: 48a0f92c0932890048596906a22ae189c48c5619fbcf9600' \
-d '{
  "description":"This text can be used to describe the PipelineRun that will be triggered by this request.",
  "properties":[
    {"name":"mytextprop","type":"TEXT","value":"my text value"},
    {"name":"mysecureprop","type":"SECURE","value":"mysecret"}
  ]
}'

Tekton パイプライン用の Delivery Pipeline トリガーの設定

Git リポジトリ内のさまざまなイベントに基づいて、Tekton パイプラインのトリガーを設定できます。 以下のオプションを使用して、Gitトリガーをフィルタリングします:

  • ブランチ:指定したイベントが発生すると、選択したレポの特定のブランチのパイプラインをトリガーします。
  • パターン:指定したイベントが発生したときに、選択したレポのタグとブランチ名のグロブマッチに基づいてパイプラインをトリガーします。
  • CELフィルター:イベントが指定された CEL (Common Expression Language) フィルタに一致すると、パイプラインをトリガーします。

commit push、'pull request opened、'updated、'closed などのイベントを指定するには、**ブランチ・オプションとパターン・**オプションを使用する。 また、'プルリクエストのドラフトイベントを含めるオプションを切り替えることで、プルリクエストのイベントを指定し、ドラフトプルリクエストのパイプライントリガーを許可またはスキップすることができます。 同様に、フォークしたリポジトリからのプルリクエストに対してパイプライントリガーを許可するかどうかを、フォークからのプルリクエストイベントを含めるトグルを使って指定できます。 さらに、Label filters オプションを選択すると、フィルターテーブルのユーザー定義基準に従って、プルリクエストラベルに基づくフィルタリングを有効にすることができます。

CELフィルターオプションは、イベントペイロードの他のフィールドとのマッチングのような、より高度なユースケースをサポートする。 このオプションは、プッシュイベント、すべてのプルリクエストイベント、課題イベント、課題コメントイベント、リリースイベント、および GitHub マージキューイベントをサポートします。 このオプションは、Webhook ペイロードに基づくイベントフィルタリングを提供するために、Generic Webhook トリガーのオプション機能としても利用可能です。

CELの概要

CELは、簡潔で読みやすい方法で条件を評価し、検証を実行するために設計された、強力で柔軟な式言語である。 CELは、イベントのフィルタリングなど、複雑な条件ロジックを必要とするユースケースに最適です。

Tektonパイプラインでは、CELオプションが導入され、より強力で柔軟なイベントフィルタリングが可能になりました。 ウェブフックのペイロードは、ユーザーによって提供された CEL 式に対して評価されます。 CEL式が true と評価されると、パイプラインの実行がトリガーされます。

CELでは、以下の機能がサポートされています:

  • 算術演算子(+-*/%
  • 比較演算子(=!=<><=>=
  • 論理演算子(&&||
  • 文字列演算子 (contains, matches, startsWith, endsWith)
  • コレクション演算子 (in, !in)
  • 変数(変数名で直接参照する)
  • リテラル (文字列、数値、ブーリアン、NULLなどのリテラルをサポート)

CELには、ベースとなるCEL言語により多くの機能を提供するために、以下の拡張機能が含まれている:

  • Sets extension は、高度なセット操作をサポートし、イベントフィルタリングにおいてより柔軟性を提供します。 この拡張機能の詳細については、セットを参照してください。
  • matchesGlob は、既存のパターンフィールドを新しいCELフィルターオプションに変換する際の互換性を提供します。 より高度な正規表現マッチングには、ネイティブのCEL matches 演算子を使うことをお勧めします。

CELの詳細については、CELドキュメントを参照してください。

CELへの変換

既存のイベント・フィルタリングの選択項目をCEL式に変換するには、以下の手順を実行します:

  1. 変換したいGitトリガーを編集する。

  2. Trigger on セクションで、CELフィルターオプションを選択します。

    CELフィルターオプション※
    フィルターオプション
    CELフィルターオプション

    以下の要素は、等価なCEL表現に自動的に変換される:

    • ブランチまたはパターン
    • commit pushpull request openedupdatedclosed などのイベント
    • プルリクエストのドラフトイベントを含める
    • フォークからのプルリクエストイベントを含める
    • ラベル・フィルター

    CELフィルター換装※
    フィルター換装
    CELフィルター換装

    生成されたCEL式はテキストエリアのフィールドに書き込まれ、必要に応じて編集できる。

    汎用Webhookトリガーにはコンバージョン用のフィルターが存在しないため、CELフィルターへのコンバージョンはトリガー Git にのみ適用されます。

    CEL オプションを選択した状態でトリガーを保存すると、それまで選択されていたイベントを CEL 式に置き換えます。 CELフィルター・オプションを保存した後に、ブランチまたはパターン・オプションに切り替えると、以前のイベント選択は保存されません。 CELオプションからBranchまたはPatternオプションへの変換はサポートされていない。

CELの表現例

次の例は、サポートされているGitタイプに共通するCEL表現です:GitHubGitLabBitBucket です。 これらの例をコピーして、あなたの要件に合うように変更することができます。

GitHubの例

指定したブランチに対してプルリクエストがオープンまたは更新されたときに実行されます:

   header['x-github-event'] == 'pull_request' &&
      (body.action == 'opened' || body.action == 'synchronize') &&
      body.pull_request.base.ref == 'main'

指定したブランチにコミットがプッシュされたときに実行する:

   header['x-github-event'] == 'push' && body.ref == 'refs/heads/main'

指定したブランチにコミットがプッシュされたときに実行しますが、コミットメッセージに特定の文字列が含まれている場合はスキップします:

   header['x-github-event'] == 'push' &&
      body.ref == 'refs/heads/main' &&
      !body.head_commit.message.contains("skip run")

指定した文字列を含むコメントがプルリクエストに追加されたときに実行されます:

   header['x-github-event'] == 'issue_comment' &&
      body.action == 'created' && has(body.issue.pull_request) &&
      body.comment.body.contains('/lgtm')

指定されたラベルでissueが作成された際に実行されます:

   header['x-github-event'] == 'issues' &&
      body.action == 'opened' &&
      body.issue.labels.exists(label, label.name == 'urgent')

GitLabの例

指定したブランチに対してマージリクエストが開かれたり更新されたりしたときに実行されます:

   header['x-gitlab-event'] == 'Merge Request Hook' &&
      (body.object_attributes.action == 'open' || body.object_attributes.action == 'update') &&
      body.object_attributes.target_branch == 'main'

指定したブランチにコミットがプッシュされたときに実行する:

   header['x-gitlab-event'] == 'Push Hook' && body.ref == 'refs/heads/main'

指定したブランチにコミットがプッシュされたときに実行しますが、コミットメッセージに特定の文字列が含まれている場合はスキップします:

   header['x-gitlab-event'] == 'Push Hook' &&
      body.ref == 'refs/heads/main' &&
      !body.object_attributes.last_commit.message("skip run")

指定された文字列を含むコメントがマージリクエストに追加されたときに実行されます:

   header['x-gitlab-event'] == 'Note Hook' &&
      body.object_attributes.noteable_type == 'MergeRequest' &&
      body.object_attributes.action == 'create' &&
      body.object_attributes.note.contains('/lgtm')

指定されたラベルでissueが作成された際に実行されます:

   header['x-gitlab-event'] == 'Issue Hook' &&
      (body.object_attributes.action == 'open') &&
      body.object_attributes.labels.exists(label, label.name == 'urgent')

BitBucketの例

指定したブランチに対してプルリクエストがオープンまたは更新されたときに実行されます:

   (header['x-event-key'] == 'pullrequest:created' || header['x-event-key'] == 'pullrequest:updated') &&
       body.pullrequest.destination.branch.name == 'main'

指定したブランチにコミットがプッシュされたときに実行する:

   header['x-event-key'] == 'repo:push' && body.push.changes[0].new.name == 'main'

指定したブランチにコミットがプッシュされたときに実行しますが、コミットメッセージに特定の文字列が含まれている場合はスキップします:

   header['x-event-key'] == 'repo:push' &&
      body.push.changes[0].new.name == 'main' &&
      !body.push.changes[0].commits[0].message("skip run")

指定した文字列を含むコメントがプルリクエストに追加されたときに実行されます:

   header['x-event-key'] == 'pullrequest:comment_created' &&
      body.comment.content.raw.contains('/lgtm')

指定されたラベルでissueが作成された際に実行されます:

   header['x-event-key'] == 'issue:created' &&
      body.issue.kind == 'bug'

フィルター

フィルターにより、ユーザーは特定の条件に基づいてプルリクエストを絞り込むことができます。 フィルターフィールドは現在、プルリクエストにラベルを指定することをサポートしており、それによってラベルの有無に基づいてパイプラインの実行を制御します。 しかし、ラベルが追加または削除されたときにパイプラインを起動するのではなく、パイプラインの実行を許可する前にPRのラベルを検証する。

実行方法:

  • PRイベントが発生すると(新しいコミットが追加されるなど)、パイプラインはPRのラベルをチェックする。
  • PRがラベルの条件を満たしている場合(例えば、「承認済み」ラベルを持つ場合)、パイプラインは実行される。
  • PRがラベル条件を満たさない場合、パイプラインは実行されない。

設定例

以下のスクリーンショットは、トリガーが "approved "と "reviewed "のラベルに設定されている例です。

  • PRパイプラインは、両方のラベルが存在する場合にのみトリガーされる。
  • どちらかのラベルがない場合、パイプラインは実行されない。

PR パイプライン実行のラベルフィルターの設定
PR パイプライン実行のラベルフィルターの設定

イベントペイロードのチェック

イベント・フィルタリングのために CEL 式を書くとき、式が評価されるウェブフック・ペイロードの構造と内容を理解する必要があります。 パイプラインランの詳細ページから、既存のランのペイロードを検査することができます。

イベントペイロードを表示するには、パイプライン実行の詳細ページでコンテキストを表示をクリックします。 パイプラインの実行をトリガーした生のウェブフック・ペイロードを表示し、CEL式の関連フィールドが希望する条件に一致することを確認できます。

API を使用した Tekton 用の Delivery Pipeline の作成

  1. IAM ベアラー・トークンを取得します。 あるいは、SDK を使用している場合は、 IAM API キーを取得 し、環境変数を使用してクライアント・オプションを設定します。

    export CD_TEKTON_PIPELINE_APIKEY={api_key}
    
  2. Delivery Pipeline ツール統合の追加先となる ツールチェーンのリージョンと ID を決定します

  3. Delivery Pipeline ツール統合をツールチェーンに追加します。

    curl -X POST \
      https://api.{region}.devops.cloud.ibm.com/toolchain/v2/toolchains/{toolchain_id}/tools \
      -H 'Authorization: Bearer {iam_token}' \
      -H 'Accept: application/json' \
      -H 'Content-Type: application/json' \
      -d '{
        "tool_type_id": "pipeline",
        "parameters": {
          "name": "{tool_integration_name}",
          "type" : "tekton"
        }
      }'
    
    const CdToolchainV2 = require('@ibm-cloud/continuous-delivery/cd-toolchain/v2');
    ...
    (async () => {
       const toolchainService = CdToolchainV2.newInstance();
       const pipelinePrototypeModel = {
          toolchainId: {toolchain_id},
          toolTypeId: 'pipeline',
          name: {tool_integration_name},
          type: "tekton"
       };
       const pipelineTool = await toolchainService.createTool(pipelinePrototypeModel);
    })();
    
    import (
    	   "github.com/IBM/continuous-delivery-go-sdk/cdtoolchainv2"
    )
    ...
    toolchainClientOptions := &cdtoolchainv2.CdToolchainV2Options{}
    toolchainClient, err := cdtoolchainv2.NewCdToolchainV2UsingExternalConfig(toolchainClientOptions)
    createPipelineToolOptions := toolchainClient.NewCreateToolOptions({toolchain_id}, "pipeline")
    createPipelineToolOptions.SetName({tool_integration_name})
    createPipelineToolOptions.SetType("tekton")
    pipelineTool, response, err := toolchainClient.CreateTool(createPipelineToolOptions)
    
    from ibm_continuous_delivery.cd_toolchain_v2 import CdToolchainV2
    ...
    toolchain_service = CdToolchainV2.new_instance()
    pipeline_tool = toolchain_service.create_tool(
       name = {tool_integration_name},
       toolchain_id = {toolchain_id},
       tool_type_id = "pipeline",
       type = "tekton"
    )
    
    import com.ibm.cloud.continuous_delivery.cd_toolchain.v2.CdToolchain;
    import com.ibm.cloud.continuous_delivery.cd_toolchain.v2.model.*;
    ...
    CdToolchain toolchainService = CdToolchain.newInstance();
    CreateToolOptions createPipelineToolOptions = new CreateToolOptions.Builder()
       .name({tool_integration_name})
       .toolchainId({toolchain_id})
       .toolTypeId("pipeline")
       .type("tekton")
       .build();
    Response<ToolchainToolPost> response = toolchainService.createTool(createPipelineToolOptions).execute();
    ToolchainToolPost pipelineTool = response.getResult();
    

    以下の表に、前のステップで使用された各変数をリストして説明します。

    APIとのDelivery Pipelineツール統合を追加するための変数
    変数 説明
    {region} ツールチェーンが存在するリージョン (例: us-south)。
    {tool_integration_name} ツール統合の名前。例えば、 ci-pipeline など。
    {toolchain_id} ツール統合の追加先となるツールチェーンの ID。
    {iam_token} 有効なIAMベアラートークン。
  4. 指定された地域内のパブリック管理対象ワーカーを使用するように Delivery Pipeline を構成します。

    curl -X POST \
       https://api.{region}.devops.cloud.ibm.com/pipeline/v2/tekton_pipelines \
       -H 'Authorization: Bearer {iam_token}' \
       -H 'Accept: application/json' \
       -H 'Content-Type: application/json' \
       -d '{
          "id": "{pipeline_id}",
          "worker": { "id": "public" }
       }'
    
    const CdTektonPipelineV2 = require('@ibm-cloud/continuous-delivery/cd-tekton-pipeline/v2');
    ...
    (async () => {
       const tektonService = CdTektonPipelineV2.newInstance();
       const workerIdentityModel = {
          id: 'public',
       };
       const params = {
          id: {pipeline_id},
          worker: workerIdentityModel,
       };
       const res = await tektonService.createTektonPipeline(params);
    })();
    
    import {
       "github.com/IBM/continuous-delivery-go-sdk/cdtektonpipelinev2"
    }
    ...
    cdTektonPipelineOptions := &cdtektonpipelinev2.CdTektonPipelineV2Options{}
    pipelineSvc, err = cdtektonpipelinev2.NewCdTektonPipelineV2UsingExternalConfig(cdTektonPipelineOptions)
    createTektonPipelineOptions := pipelineSvc.NewCreateTektonPipelineOptions(
       {pipeline_id}
    )
    workerIdentityModel := &cdtektonpipelinev2.WorkerIdentity{
       ID: core.StringPtr("public"),
    }
    createTektonPipelineOptions.SetWorker(workerIdentityModel)
    tektonPipeline, response, err := pipelineSvc.CreateTektonPipeline(createTektonPipelineOptions)
    
    from ibm_continuous_delivery.cd_tekton_pipeline_v2 import CdTektonPipelineV2
    ...
    pipeline_service = CdTektonPipelineV2.new_instance()
    worker_identity_model = {
       'id': 'public',
    }
    response = pipeline_service.create_tekton_pipeline(
       id = {pipeline_id},
       worker = worker_identity_model
    )
    tekton_pipeline = response.get_result()
    
    import com.ibm.cloud.continuous_delivery.cd_tekton_pipeline.v2.CdTektonPipeline;
    import com.ibm.cloud.continuous_delivery.cd_tekton_pipeline.v2.model.*;
    ...
    CdTektonPipeline pipelineSvc = CdTektonPipeline.newInstance();
    WorkerIdentity workerIdentityModel = new WorkerIdentity.Builder()
       .id("public")
       .build();
    CreateTektonPipelineOptions createTektonPipelineOptions = new CreateTektonPipelineOptions.Builder()
       .id({pipeline_id})
       .worker(workerIdentityModel)
       .build();
    Response<TektonPipeline> response = pipelineSvc.createTektonPipeline(createTektonPipelineOptions).execute();
    TektonPipeline tektonPipeline = response.getResult();
    

    以下の表に、前のステップで使用された各変数をリストして説明します。

    APIDelivery Pipelineで
    変数 説明
    {region} ツールチェーンが存在するリージョン (例: us-south)。
    {pipeline_id} パイプライン・ツール統合が作成された、前のステップから返されたパイプラインの ID。
    {iam_token} 有効なIAMベアラートークン。

Delivery Pipeline API の詳細については、 API ドキュメントをご覧ください。

Terraform を使用した Tekton 用の Delivery Pipeline の作成

  1. Terraform CLI をインストールし、Terraform 用の IBM Cloud Provider プラグインを構成するために、Terraform on IBM Cloud® 入門のチュートリアルに従ってください。

  2. main.tfという名前の Terraform 構成ファイルを作成します。 このファイルに、 HashiCorp 構成言語を使用してパイプラインを作成するための設定を追加してください。 この構成言語の使用について詳しくは、 Terraform の資料を参照してください。

    パイプラインはツールチェーンに属している必要があります。 Terraform を使用して ツールチェーンを作成することもできます。

    以下の例では、指定された Terraform リソースを使用して、ツールチェーンとパイプラインを作成します。

    data "ibm_resource_group" "group" {
      name = "default"
    }
    resource "ibm_cd_toolchain" "my_toolchain" {
      name              = "terraform_toolchain"
      resource_group_id = data.ibm_resource_group.group.id
    }
    resource "ibm_cd_toolchain_tool_pipeline" "my_pipeline_tool" {
      parameters {
         name = "terraform-pipeline-integration"
      }
      toolchain_id = ibm_cd_toolchain.my_toolchain.id
    }
    resource "ibm_cd_tekton_pipeline" "my_tekton_pipeline" {
     worker {
         id = "public"
     }
     pipeline_id = ibm_cd_toolchain_tool_pipeline.my_pipeline_tool.tool_id
    }
    

    ibm_cd_toolchain_tool_pipeline および ibm_cd_tekton_pipeline リソースについて詳しくは、Terraform レジストリー資料で引数参照の詳細を参照してください。

  3. 必要な場合は、Terraform CLI を初期化します。

    terraform init
    
  4. Terraform 実行プランを作成します。 このプランは、ツールチェーンを作成するために実行する必要があるすべてのアクションを要約します。

    terraform plan
    
  5. Terraformの実行プランを適用します。 Terraform は、ツールチェーンを作成するために必要なすべてのアクションを実行します。

    terraform apply
    

Tekton の Delivery Pipeline の表示

パイプラインを表示するには、コンソール UI、API、または Terraform を使用します。

コンソールを使用した Delivery Pipeline の表示

少なくとも 1 つのトリガーが追加されるまで、Tekton Delivery Pipeline の「概要」ページに空のテーブルが表示されます。 Tekton パイプラインが (手動で、または外部イベントの結果として) 実行されると、パイプライン内の各トリガーに関連付けられている最近の実行に関するデータが表に表示されます。 各行には、単一のトリガーに関する情報が表示され、そのトリガーに関連付けられた最近の実行のグラフが表示されます。 これらの実行の成功または失敗、および最新の実行が行われた時刻などの情報も表示されます。 トリガーごとにアクションを実行することもできます。トリガーを手動で実行するか、お気に入りとしてマーク付けするか、トリガーを編集するか、トリガーを有効または無効にするか、またはトリガーを削除します。 グラフ内の項目の 1 つをクリックして、その個々の PipelineRun の詳細を検査することもできます。 または、トリガー名をクリックして、そのトリガーに関連付けられているすべての PipelineRun に対して PipelineRuns ページを開くことができます。 各 PipelineRun の状況、トリガー、期間などの関連情報も使用できます。

パイプライン実行は、以下のいずれかの状態になります。

  • 保留中: PipelineRun が要求されています。
  • 実行中: PipelineRun がクラスターで実行されています。
  • 成功: クラスターで PipelineRun が正常に完了しました。
  • 失敗: PipelineRun が失敗しました。 ログ・ファイルで実行について調べて、原因を特定してください。
  • キュー状態: PipelineRun の処理が許可されました。ワーカーのキャパシティーが利用可能になったときに実行されます。
  • 待機中: PipelineRun はキューに入れられるのを待っています。
  • キャンセル済み: システムまたはユーザーによって PipelineRun がキャンセルされました。 待機中の実行数が許容上限を超えた場合、システムは PipelineRun をキャンセルします。
  • エラー: PipelineRun にエラーが含まれているため、それをクラスターに適用できませんでした。 エラーの原因について、詳しくは実行詳細情報を参照してください。

選択した実行について詳しくは、表内の任意の行をクリックして、 Task 定義および各 PipelineRun 定義のステップを表示します。 また、各Task定義およびステップの状況、ログ、詳細、および PipelineRun 定義の全体的な状況を表示することもできます。

および PipelineRuns そのログの保持期間は、サービス Continuous Delivery インスタンスに対して選択されたプランによって異なります。 プロフェッショナル・プランでは、Tekton パイプラインは 1 年間保持されます。 ライト・プランでは、Tekton パイプラインは 30 日間保持されます。 保持期間を超えて PipelineRuns データを保持するには、該当 PipelineRuns セクションで 「アクション 」>「 ダウンロード」 を選択し、.zipファイルをダウンロードしてください。

API を使用した Delivery Pipeline の表示

  1. IAM ベアラー・トークンを取得します。 あるいは、SDK を使用している場合は、 IAM API キーを取得 し、環境変数を使用してクライアント・オプションを設定します。

    export CD_TEKTON_PIPELINE_APIKEY={api_key}
    
  2. パイプライン・データを取得します。

    curl -X GET \
      https://api.{region}.devops.cloud.ibm.com/pipeline/v2/tekton_pipelines/{pipeline_id} \
      -H 'Authorization: Bearer {iam_token}' \
      -H 'Accept: application/json'
    
    const CdTektonPipelineV2 = require('@ibm-cloud/continuous-delivery/cd-tekton-pipeline/v2');
    ...
    (async () => {
       const pipelineSvc = CdTektonPipelineV2.newInstance();
       const params = {
          id: {pipeline_id},
       };
       const res = await pipelineSvc.getTektonPipeline(params);
    })();
    
    import {
       "github.com/IBM/continuous-delivery-go-sdk/cdtektonpipelinev2"
    }
    ...
    cdTektonPipelineOptions := &cdtektonpipelinev2.CdTektonPipelineV2Options{}
    pipelineSvc, err = cdtektonpipelinev2.NewCdTektonPipelineV2UsingExternalConfig(cdTektonPipelineOptions)
    getTektonPipelineOptions := pipelineSvc.NewGetTektonPipelineOptions(
       {pipeline_id}
    )
    tektonPipeline, response, err := pipelineSvc.GetTektonPipeline(getTektonPipelineOptions)
    
    from ibm_continuous_delivery.cd_tekton_pipeline_v2 import CdTektonPipelineV2
    ...
    pipeline_service = CdTektonPipelineV2.new_instance()
    response = pipeline_service.get_tekton_pipeline(
       id = {pipeline_id}
    )
    tekton_pipeline = response.get_result()
    
    import com.ibm.cloud.continuous_delivery.cd_tekton_pipeline.v2.CdTektonPipeline;
    import com.ibm.cloud.continuous_delivery.cd_tekton_pipeline.v2.model.*;
    ...
    CdTektonPipeline pipelineSvc = CdTektonPipeline.newInstance();
    GetTektonPipelineOptions getTektonPipelineOptions = new GetTektonPipelineOptions.Builder()
       .id({pipeline_id})
       .build();
    Response<TektonPipeline> response = pipelineSvc.getTektonPipeline(getTektonPipelineOptions).execute();
    TektonPipeline tektonPipeline = response.getResult();
    

以下の表に、前のステップで使用された各変数をリストして説明します。

APIDelivery Pipelineで
変数 説明
{region} パイプラインが存在する領域 (例: us-south)。
{pipeline_id} 表示したいパイプラインのID。
{iam_token} 有効なIAMベアラートークン。

Terraform を使用した Delivery Pipeline の表示

  1. 既存のパイプラインの resource ブロックを含む Terraform ファイル (例えば、 main.tf) を見つけます。

  2. output ブロックを Terraform ファイルに追加します (まだブロックが含まれていない場合)。

    以下の例の resource は、既存のパイプラインを記述しています。 output ブロックは、指定されたリソースの属性を出力するように Terraform に指示します。

    data "ibm_resource_group" "group" {
      name = "default"
    }
    resource "ibm_cd_toolchain" "my_toolchain" {
      name              = "terraform_toolchain"
    resource_group_id = data.ibm_resource_group.group.id
    }
    resource "ibm_cd_toolchain_tool_pipeline" "my_pipeline_tool" {
      parameters {
        name = "terraform-pipeline-integration"
      }
      toolchain_id = ibm_cd_toolchain.my_toolchain.id
    }
    resource "ibm_cd_tekton_pipeline" "my_tekton_pipeline" {
      worker {
        id = "public"
      }
      pipeline_id = ibm_cd_toolchain_tool_pipeline.my_pipeline_tool.tool_id
    }
    output "my_tekton_pipeline_attributes" {
      value = ibm_cd_tekton_pipeline.my_tekton_pipeline
    }
    

    ibm_cd_toolchain_tool_pipeline および ibm_cd_tekton_pipeline リソースについて詳しくは、Terraform レジストリー資料で引数参照の詳細を参照してください。

  3. 必要な場合は、Terraform CLI を初期化します。

    terraform init
    
  4. refresh-only オプションを指定して Terraform 実行プランを適用します。 Terraform はその状態をリフレッシュし、パイプライン・リソースの属性を表示します。

    terraform apply -refresh-only -auto-approve
    

Delivery Pipeline for Tektonのログを見る

PipelineRuns のログは、コンソール UI、API、またはログをダウンロードすることで見ることができます。 さらに、" Continuous Delivery "サービスインスタンスを設定して、Tekton PipelineRun のログを同じアカウント IBM Cloud Logs インスタンスにルーティングすることもできます。

コンソールを使って Delivery Pipeline の実行ログを見る

コンソールUIを使用して、Tektonパイプラインの PipelineRuns ログを表示できます。 ランの各ステップのログにアクセスするには、Tekton Delivery Pipeline Overviewページの表中の個々のランをクリックし、 ランの詳細ページを開きます。

Show Context(コンテキストの表示)] をクリックして、 PipelineRun に関する追加メタデータを表示し、[ Agent Logs(エージェ ントログ) ]をクリックして、実行を処理および実行したワーカーエージェントのログを表示します。 エージェントログには、 PipelineRun が実行されたクラスタ名、ワーカーエージェントのバージョン番号、 git クローン操作の詳細、 PipelineRun の実行準備時にエージェントが行ったその他の処理手順などの有用な情報が含まれています。 これらのログには、実行中に問題が発生した場合に役立つエラーやデバッグ情報も含まれる。

PipelinRun 詳細ページでは、すべてのログと、 PipelineRun に関するメタデータを含むファイルを含む PipelineRun zip バンドルもダウンロードできる。 これは、 PipelineRun の詳細ページで 「アクション 」>「 ダウンロード 」をクリックすることでダウンロードできる。

で実行された Delivery Pipeline のログを表示する。 IBM Cloud Logs

Tektonパイプラインの PipelineRuns のログは、 IBM Cloud Logs インスタンスに送信することができ、そこでログの表示、フィルタリング、検索を行うことができます。 この機能を有効にするには、いくつかのステップが必要です:

  1. Continuous Delivery " インスタンスと同じアカウントリソース・グループに IBM Cloud Logs のインスタンスが必要です。 Observability-> Logging-> Instancesにアクセスして、既存の IBM Cloud Logs インスタンスを確認するか、新しい IBM Cloud Logs インスタンスを作成してください。
  2. Observability-> Logging-> Routingと進む。 Tektonパイプラインおよび Continuous Delivery サービスインスタンスが配置されている地域のテーブルで、[ ターゲットの設定 ] をクリックします。
  3. インスタンスの一覧表から、 IBM Cloud Logs インスタンスを選択します。 インスタンスが表示される前に、まず「Authorize(認証)」ボタンをクリックする必要があるかもしれません。
  4. IBM Cloud の "リソース "ページから" Continuous Delivery "サービス・インスタンスを開く。
  5. 管理] ページに移動し、 [設定] タブを開きます。 次に、"Enable Tekton pipeline platform logs "のトグルをクリックします。

上記の設定が完了すると、新しい PipelineRuns のログが IBM Cloud Logs インスタンスに転送されます。 IBM Cloud Logs でログを見るには:

  1. IBM Cloud Logs インスタンスのダッシュボードを開き、 Logs ページに移動します。
  2. Filters セクションで、 Application フィルターの下にあるibm - platform-logsと、 app フィルターの下にある toolchainのチェックボックスをクリックする。
  3. 日付の範囲を選択します。
  4. ここに表示されるログデータには、ログそのものだけでなく、メタデータも含まれている。 関連するログデータを表示するために、このビューに表示される列をカスタマイズし、これらのプロパティに基づいてフィルタリングすることができます。 以下に例を示します。
    • message.log- これは1行のログテキストを含む。
    • message.timestamp- このログ行に関連付けられたタイムスタンプ。
    • message.lineNumber- これは、ステップログ内のこのログ行の行番号を表す。
    • message.pipelineId- このログを生成したランを所有するパイプラインのID。
    • message.region- この PipelinRun が走った地域の名前。
    • message.regionId- この PipelinRun が実行された地域のID。
    • message.severity- このログ行に関連する重大度、例えば errordebuginfo
    • message.pipelineMetadata などの有用なデータが含まれている:
      • accountId- この PipelineRun を所有する IBM Cloud アカウント ID。
      • buildNumber- 関連する PipelineRun のビルド番号。
      • pipelineName- このランを所有するパイプラインの名前。
      • pipelineRunId- このログラインを生成した PipelineRun のID。
      • stepName- このログ行を生成したステップの名前。
      • taskName- このlogvに関連付けられたタスクの名前。
      • toolchainId- ランを所有するパイプラインを含むツールチェーンのID。
      • triggerName- このログ行を生成したランを作成したパイプライントリガーの名前。

API を使用して Delivery Pipeline の実行ログを表示する

  1. IAM ベアラー・トークンを取得します

  2. PipelineRun で利用可能なログオブジェクトのリストを取得する。

    curl -X GET \
      https://api.{region}.devops.cloud.ibm.com/pipeline/v2/tekton_pipelines/{pipeline_id}/pipeline_runs/{run_id}/logs \
      -H 'Authorization: Bearer {iam_token}' \
      -H 'Accept: application/json'
    

    このAPIリクエストはログオブジェクトの配列を返す。 PipelineRun:

    {
       "logs": [
          {
             "name": "pipelinerun-sample/step-0",
             "id": "{sample_log_id}",
             "href": "https://api.us-south.devops.cloud.ibm.com/pipeline/v2/tekton_pipelines/{pipeline_id}/pipeline_runs/{run_id}/logs/{sample_log_id}"
          }
       ]
    }
    
  3. 各ログオブジェクトエントリーは、 PipelineRun のステップに対応する。 ステップログを取得するには、関連するログオブジェクトの href 値を使用してリクエストします:

    curl -X GET \
      https://api.{region}.devops.cloud.ibm.com/pipeline/v2/tekton_pipelines/{pipeline_id}/pipeline_runs/{run_id}/logs/{sample_log_id} \
      -H 'Authorization: Bearer {iam_token}' \
      -H 'Accept: application/json'
    

    このリクエストは、ログとlog_idを含むオブジェクトをレスポンスとして返します:

    {
       "data": "log content",
       "id": "{sample_log_id}"
    }
    

を削除する。 Delivery Pipeline

パイプラインを削除するには、コンソールUI、API、Terraformを使用します。 この削除は元に戻すことができません。

コンソールUIを使用してツールチェーンを削除する

  1. IBM Cloud コンソールから、 メニューアイコンの ハンバーガーアイコン > Platform Automation > Toolchains をクリックします。
  2. 「ツールチェーン」ページで、ツールチェーンをクリックしてその「概要」ページを開きます。 代わりに、アプリの「アプリの詳細」ページで、ツールチェーン名をクリックすることもできます。
  3. デリバリーパイプライン」セクションで、削除したいパイプラインを見つけます。
  4. パイプラインのメニューアイコンをクリックし、 削除オプションをクリックします。
  5. ダイアログの「 削除 」をクリックして、削除を確認してください。

API を使用して「 Delivery Pipeline 」を削除する

  1. IAM ベアラー・トークンを取得します。 あるいは、SDK を使用している場合は、 IAM API キーを取得 し、環境変数を使用してクライアント・オプションを設定します。

    export CD_TEKTON_PIPELINE_APIKEY={api_key}
    
  2. DevOps Insights ツール統合の追加先となる ツールチェーンの地域と ID を決定します

  3. パイプラインを削除します。

    curl -X DELETE \
      https://api.{region}.devops.cloud.ibm.com/toolchain/v2/toolchains/{toolchain_id}/tools/{pipeline_id} \
      -H 'Authorization: Bearer {iam_token}'
    
    const CdTektonPipelineV2 = require('@ibm-cloud/continuous-delivery/cd-tekton-pipeline/v2');
    ...
    (async () => {
       const pipelineSvc = CdTektonPipelineV2.newInstance();
       const params = {
          id: {pipeline_id},
       };
       const res = await pipelineSvc.deleteTektonPipeline(params);
    })();
    
    import {
       "github.com/IBM/continuous-delivery-go-sdk/cdtektonpipelinev2"
    }
    ...
    cdTektonPipelineOptions := &cdtektonpipelinev2.CdTektonPipelineV2Options{}
    pipelineSvc, err = cdtektonpipelinev2.NewCdTektonPipelineV2UsingExternalConfig(cdTektonPipelineOptions)
    deleteTektonPipelineOptions := pipelineSvc.NewDeleteTektonPipelineOptions(
       {pipeline_id}
    )
    response, err := pipelineSvc.DeleteTektonPipeline(deleteTektonPipelineOptions)
    
    from ibm_continuous_delivery.cd_tekton_pipeline_v2 import CdTektonPipelineV2
    ...
    pipeline_service = CdTektonPipelineV2.new_instance()
    response = pipeline_service.delete_tekton_pipeline(
       id={pipeline_id}
    )
    
    import com.ibm.cloud.continuous_delivery.cd_tekton_pipeline.v2.CdTektonPipeline;
    import com.ibm.cloud.continuous_delivery.cd_tekton_pipeline.v2.model.*;
    ...
    CdTektonPipeline pipelineSvc = CdTektonPipeline.newInstance();
    DeleteTektonPipelineOptions deleteTektonPipelineOptions = new DeleteTektonPipelineOptions.Builder()
       .id({pipeline_id})
       .build();
    Response<Void> response = pipelineSvc.deleteTektonPipeline(deleteTektonPipelineOptions).execute();
    

以下の表に、前のステップで使用された各変数をリストして説明します。

APIDelivery Pipelineで
変数 説明
{region} ツールチェーンが存在するリージョン (例: us-south)。
{toolchain_id} 削除するパイプラインが含まれているツールチェーンの ID。
{pipeline_id} 削除したいパイプラインのID。
{iam_token} 有効なIAMベアラートークン。

Terraform を使用した Delivery Pipeline の削除

  1. 既存のパイプラインの resource ブロックを含む Terraform ファイル (例えば、 main.tf) を見つけます。

    以下の例の resource は、既存のパイプラインを記述しています。

    data "ibm_resource_group" "group" {
      name = "default"
    }
    resource "ibm_cd_toolchain" "my_toolchain" {
      name              = "terraform_toolchain"
      resource_group_id = data.ibm_resource_group.group.id
    }
    resource "ibm_cd_toolchain_tool_pipeline" "my_pipeline_tool" {
      parameters {
         name = "terraform-pipeline-integration"
      }
      toolchain_id = ibm_cd_toolchain.my_toolchain.id
    }
    resource "ibm_cd_tekton_pipeline" "my_tekton_pipeline" {
     worker {
         id = "public"
     }
     pipeline_id = ibm_cd_toolchain_tool_pipeline.my_pipeline_tool.tool_id
    }
    
  2. Terraform ファイルから ibm_cd_toolchain_tool_pipeline ブロックと ibm_cd_tekton_pipeline resource ブロックを削除します。

  3. 必要な場合は、Terraform CLI を初期化します。

    terraform init
    
  4. Terraform 実行プランを作成します。 この計画は、パイプラインを削除するために実行する必要があるすべてのアクションを要約します。

    terraform plan
    
  5. Terraformの実行プランを適用します。 Terraform は、パイプラインを削除するために必要なすべてのアクションを実行します。

    terraform apply
    

トリガーの使用

パイプラインは、ウェブUIまたはコマンドライン/API呼び出しのいずれかを使用してトリガーできます。 これは CICDCC パイプラインのようなパイプラインによく使われる。

コマンドラインまたはAPI経由でパイプラインを起動する

IBM Cloud CLIを使用してコマンドラインからパイプラインをトリガーすることも、 curl を使用してAPIを直接コールすることもできます。

IBM Cloud CLI の使用方法

IBM Cloud CLIを使用してパイプラインをトリガーできます。 CLIコマンドの詳細については、 IBM Cloud CLI docsを 参照してください。

  1. IBM Cloud への ログイン
    ibmcloud login --sso
    
  2. パイプラインを手動でトリガーする
    ibmcloud dev tekton-trigger <pipeline_id> --trigger-name "<trigger_name>"
    

コマンドの pipeline_idtrigger_name を置き換えたら、パイプラインを開始するために実行する。 成功すれば、パイプラインが開始されたことが出力され、以下のような詳細が表示される:

パイプラインが正常に開始しました。

  • 実行ID : ruekhg-eifjkvr-kjf-rkvj
  • トリガー:CCマニュアルトリガー
  • ステータス : 保留中

その後、UIでそれぞれのツールチェインを開くことで、パイプラインがトリガーされたことを確認できます。

curl を使用して API 経由でパイプラインをトリガーする

curl を使って、API経由でパイプラインを直接トリガーすることができます。 API経由でTektonパイプラインをトリガーする方法の詳細については、 IBM Cloud API Docs/ を参照してください CD テクトン・パイプライン.

認証プロセス
  • APIキーをまだお持ちでない場合は、 IBM Cloud API Keysに アクセスしてAPIキーを生成してください。

  • APIキーを取得したら、以下の curl

    curl -X POST 'https://iam.cloud.ibm.com/identity/token' \
      -H 'Content-Type:application/x-www-form-urlencoded' \
      -H 'Accept:application/json' \
      -d 'grant_type=urn:ibm:params:oauth:grant-type:apikey&apikey=<API_KEY>'
    
    
  • <API_KEY> を、生成した API キーに置き換えてください。

  • IAM トークンを取得したら、それを使って以下のリクエストを認証し、パイプラインにアクセスします:

    curl -L --request GET 'https://api.us-south.devops.cloud.ibm.com/pipeline/v2/tekton_pipelines/<PIPELINE_ID>' \
    --header 'Authorization: Bearer <IAM_TOKEN_VALUE>'
    
  • 認証後、以下の curl コマンドを使用してパイプラインをトリガーする:

    curl -i -X POST \
        -H "Authorization: Bearer <IAM_token>" \
        -H "Accept: application/json" \
        -H "Content-Type: application/json" \
        --data '{
            "trigger": {
                "name": "CC Manual Trigger",
                "properties": {
                    "pipeline-debug": "false"
                }
            }
        }' \
        "https://api.us-south.devops.cloud.ibm.com/pipeline/v2/tekton_pipelines/<pipeline_id>/pipeline_runs"
    
  • -i オプションは、 HTTP レスポンス・ヘッダが出力に含まれるようにするもので、エラーの場合に HTTP ステータス・コードを確認するのに役立つ。

  • パイプラインに必要な環境プロパティは、 --data ペイロード内に追加できます。プロパティの追加方法については、 IBM Cloud API Docs/ を参照してください CD テクトン・パイプライン.

  • パイプラインがトリガーされると、出力は以下のようになる:

    • HTTP レスポンスは、 201 Created ステータスを表示し、パイプライン・トリガー要求が受け入れられたことを確認する。

    • location 、トリガーされたパイプラインの URL。

    • といったメタデータが表示される:

      • pipeline_id
      • status (例えば、 )。 "pending"
      • trigger 名 (例: ) "Manual CD Trigger"
      • run_id (トリガーされたランのユニークID)
      • UIでランを見るための完全な URL。
    • これにより、パイプラインが正常にトリガーされたことが確認される。 IBM Cloud UIでツールチェーンのパイプラインセクションに移動し、ステータスとログを表示できるようになりました。

  • コマンドが正常に実行されると、パイプラインが起動する。 一度トリガーされると、レスポンスにはパイプライン実行の詳細が含まれる。

TaskRun ポッドの詳細の表示

特定の TaskRun に対応する Kubernetes ポッドに関する情報を表示するには、 Task の名前をクリックし、次に「 Pod」 をクリックします。

ポッドの詳細と、ワーカーによって報告された関連イベントを表示できます。 この情報は、特定の障害をデバッグしたり、実行中にどこで時間がかかったかを判別したりするのに役立ちます。

Tekton パイプラインおよびリソースに関する詳細

Tektonパイプラインの詳細については、 Tekton:A Modern Approach to Continuous Delivery の記事をご覧ください。

パイプライン内で参照できるTektonタスクの詳細については、『 Open Toolchain Tektonカタログ 』を参照してください。 この GitHub リポジトリーには Tekton パイプラインで再利用できるタスクが含まれています。