第6章 パイプライン実行の管理


Pipelines as Code を使用すると、コードリポジトリーにパイプラインを作成し、これらのパイプラインを実行できます。

6.1. Pipelines as Code を使用したパイプライン実行の作成

Pipelines as Code を使用してパイプラインを実行するには、リポジトリーの .tekton/ ディレクトリーにパイプライン実行定義またはテンプレートを YAML ファイルとして作成します。リモート URL を使用して他のリポジトリー内の YAML ファイルを参照できますが、パイプラインの実行は、.tekton/ ディレクトリーを含むリポジトリー内のイベントによってのみトリガーされます。

Pipelines as Code リゾルバーは、パイプラインの実行をすべてのタスクと共に、外部依存関係のない単一のパイプラインの実行としてバンドルします。

注記
  • Pipeline の場合、spec または分離された Pipeline オブジェクトと共に少なくとも 1 つのパイプライン実行を使用します。
  • タスクの場合、パイプライン内にタスク仕様を埋め込むか、Task オブジェクトとして個別に定義します。

コミットと URL のパラメーター化

{{<var>}} 形式の動的でデプロイメント可能な変数を使用して、コミットと URL のパラメーターを指定できます。現在、以下の変数を使用できます。

  • {{repo_owner}}: リポジトリーの所有者。
  • {{repo_name}}: リポジトリー名。
  • {{repo_url}}: リポジトリーの完全な URL。
  • {{revision}}: コミットの完全 SHA リビジョン。
  • {{sender}}: コミットの送信者のユーザー名またはアカウント ID。
  • {{source_branch}}: イベントが発生したブランチ名。
  • {{target_branch}}: イベントが対象とするブランチ名。プッシュイベントの場合、これは source_branch と同じです。
  • {{pull_request_number}}: pull_request イベントタイプに対してのみ定義されたプルまたはマージリクエスト番号。
  • {{git_auth_secret}}: プライベートリポジトリーをチェックアウトするための Git プロバイダーのトークンで自動的に生成されるシークレット名。

イベントのパイプライン実行へのマッチング

パイプライン実行の特別なアノテーションを使用して、異なる Git プロバイダーイベントを各パイプライン実行に一致させることができます。イベントトガッチする複数のパイプライン実行がある場合に、Pipelines as Code はそれらを並行して実行し、パイプライン実行の終了直後に結果を Git プロバイダーに Post します。

プルイベントのパイプライン実行へのマッチング

次の例を使用して、main ブランチを対象とする pull_request イベントと、pipeline-pr-main パイプライン実行を一致させることができます。

apiVersion: tekton.dev/v1
kind: PipelineRun
metadata:
  name: pipeline-pr-main
annotations:
  pipelinesascode.tekton.dev/on-target-branch: "[main]" 1
  pipelinesascode.tekton.dev/on-event: "[pull_request]"
# ...
1
コンマ区切りのエントリーを追加して、複数のブランチを指定できます。たとえば、"[main, release-nightly]" です。さらに、以下を指定できます。
  • "refs/heads/main" などのブランチへの完全な参照
  • "refs/heads/\*" などのパターンマッチングを含む glob
  • "refs/tags/1.\*" などのタグ

プッシュイベントのパイプライン実行とのマッチング

次の例を使用して、pipeline-push-on-main パイプライン実行を refs/heads/main ブランチを対象とする push イベントと一致させることができます。

apiVersion: tekton.dev/v1
kind: PipelineRun
metadata:
  name: pipeline-push-on-main
annotations:
  pipelinesascode.tekton.dev/on-target-branch: "[refs/heads/main]" 1
  pipelinesascode.tekton.dev/on-event: "[push]"
# ...
1
コンマ区切りのエントリーを追加して、複数のブランチを指定できます。たとえば、"[main, release-nightly]" です。さらに、以下を指定できます。
  • "refs/heads/main" などのブランチへの完全な参照
  • "refs/heads/\*" などのパターンマッチングを含む glob
  • "refs/tags/1.\*" などのタグ

コメントイベントのパイプライン実行へのマッチング

次の例を使用すると、コメントのテキストが ^/merge-pr 正規表現と一致する場合に、pipeline-comment パイプライン実行をプルリクエストのコメントと一致させることができます。

apiVersion: tekton.dev/v1
kind: PipelineRun
metadata:
  name: pipeline-comment
annotations:
  pipelinesascode.tekton.dev/on-comment: "^/merge-pr"
# ...

パイプラインの実行は、コメント作成者が次のいずれかの要件を満たしている場合にのみ開始されます。

  • 作成者がリポジトリーの所有者である。
  • 作成者がリポジトリーのコラボレーターである。
  • 作成者がリポジトリーの組織のパブリックメンバーである。
  • コメントの作成者が Kubernetes ドキュメント で定義されているように、リポジトリーのルートにある OWNERS ファイルの approvers または reviewers のセクションにリストされている。Pipelines as Code は OWNERS および OWNERS_ALIASES ファイルの仕様をサポートします。OWNERS ファイルに フィルター セクションが含まれている場合、Pipelines as Code は approvers と reviewers を .* フィルターに対してのみ照合します。
重要

コメントイベントをパイプライン実行に一致させる機能は、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビューの機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

高度なイベントマッチング

コードとしてのパイプラインは、高度なイベントマッチングのための Common Expression Language (CEL) ベースのフィルタリングの使用をサポートします。パイプラインの実行に pipelinesascode.tekton.dev/on-cel-expression アノテーションがある場合に、Pipelines as Code は CEL 式を使用し、on-target-branch アノテーションをスキップします。単純な オンターゲットブランチ アノテーションマッチングと比較して、CEL 式では複雑なフィルタリングと否定が可能です。

Pipelines as Code で CEL ベースのフィルタリングを使用するには、次のアノテーションの例を検討してください。

  • main ブランチを対象とし、wip ブランチからの pull_request イベントを一致させるには、次のようにします。

    apiVersion: tekton.dev/v1
    kind: PipelineRun
    metadata:
      name: pipeline-advanced-pr
    annotations:
      pipelinesascode.tekton.dev/on-cel-expression: |
        event == "pull_request" && target_branch == "main" && source_branch == "wip"
    ...
  • パスが変更された場合にのみパイプラインを実行するには、glob パターンで .pathChanged 接尾辞関数を使用できます。

    apiVersion: tekton.dev/v1
    kind: PipelineRun
    metadata:
      name: pipeline-advanced-pr-pathchanged
    annotations:
      pipelinesascode.tekton.dev/on-cel-expression: |
        event == "pull_request" && "docs/\*.md".pathChanged() 1
    # ...
    1
    docs ディレクトリー内のすべてのマークダウンファイルと一致します。
  • [DOWNSTREAM] で始まるすべてのプルリクエストとマッチさせるには、以下を実行します。

    apiVersion: tekton.dev/v1
    kind: PipelineRun
    metadata:
      name: pipeline-advanced-pr-downstream
    annotations:
      pipelinesascode.tekton.dev/on-cel-expression: |
        event == "pull_request && event_title.startsWith("[DOWNSTREAM]")
    # ...
  • pull_request イベントでパイプラインを実行し、experimental ブランチを省略するには、以下を実行します。

    apiVersion: tekton.dev/v1
    kind: PipelineRun
    metadata:
      name: pipeline-advanced-pr-not-experimental
    annotations:
      pipelinesascode.tekton.dev/on-cel-expression: |
        event == "pull_request" && target_branch != experimental"
    # ...

Pipelines as Code を使用しながら高度な CEL ベースのフィルタリングを行うには、次のフィールドと接尾辞関数を使用できます。

  • event: push または pull_request イベント。
  • target_branch: ターゲットブランチ。
  • source_branch: 元の pull_request イベントのブランチ。push イベントの場合は、target_branch と同じです。
  • event_title: push イベントのコミットタイトルや、pull_request イベントのプルまたはマージリクエストのタイトルなど、イベントのタイトルとマッチします。現在、サポートされているプロバイダーは GitHub、Gitlab、および Bitbucket Cloud のみです。
  • .pathChanged: 文字列への接尾辞関数です。文字列は、パスが変更されたかどうかを確認するパスの glob にすることができます。現在、GitHub と Gitlab のみがプロバイダーとしてサポートされています。

さらに、Git リポジトリープロバイダーによって渡された完全なペイロードにアクセスできます。headers フィールドを使用して、ペイロードのヘッダー (headers['x-github-event'] など) にアクセスします。body フィールドを使用して、ペイロードの本文 (body.pull_request.state など) にアクセスします。

重要

Pipelines as Code による CEL ベースのフィルタリングにペイロードのヘッダーと本文を使用するのは、テクノロジープレビューのみの機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビューの機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

次の例では、次の条件がすべて満たされる場合にのみパイプラインの実行が開始します。

  • プルリクエストは main ブランチをターゲットとしています。
  • プルリクエストの作成者は superuser です。
  • アクションは synchronize です。このアクションは、プルリクエストで更新が発生したときにトリガーされます。
apiVersion: tekton.dev/v1
kind: PipelineRun
metadata:
  annotations:
    pipelinesascode.tekton.dev/on-cel-expression: |
      body.pull_request.base.ref == "main" &&
        body.pull_request.user.login == "superuser" &&
        body.action == "synchronize"
# ...
注記

イベントの一致に header または body フィールドを使用する場合は、retest などの Git コマンドを使用してパイプラインの実行をトリガーできない可能性があります。Git コマンドを使用する場合、ペイロード本体は、元のペイロードではなく、このコマンドを含むコメントになります。

イベント一致に body フィールドを使用するときにパイプラインの実行を再度トリガーする場合は、プルリクエストまたはマージリクエストを閉じて再度開くか、たとえば次のコマンドを使用して新しい SHA コミットを追加します。

git commit --amend --no-edit && git push --force-with-lease

Github API 操作への一時的な GitHub App トークンの使用

GitHub アプリケーションの Pipelines as Code によって生成された一時インストールトークンを使用して、GitHub API にアクセスできます。トークン値は git-provider-token キーのプライベートリポジトリー用に生成された一時的な {{git_auth_secret}} 動的変数に格納されます。

たとえば、プル要求にコメントを追加するには、Pipelines as Code アノテーションを使用して Tekton Hub からの github-add-comment タスクを使用できます。

...
  pipelinesascode.tekton.dev/task: "github-add-comment"
...

その後、タスクをパイプライン実行定義の tasks セクションまたは finally タスクに追加できます。

[...]
tasks:
  - name:
      taskRef:
        name: github-add-comment
      params:
        - name: REQUEST_URL
          value: "{{ repo_url }}/pull/{{ pull_request_number }}" 1
        - name: COMMENT_OR_FILE
          value: "Pipelines as Code IS GREAT!"
        - name: GITHUB_TOKEN_SECRET_NAME
          value: "{{ git_auth_secret }}"
        - name: GITHUB_TOKEN_SECRET_KEY
          value: "git-provider-token"
...
1
動的変数を使用すると、任意のリポジトリーからのプルリクエストに対して、このスニペットテンプレートを再利用できます。
注記

GitHub アプリでは、生成されたインストールトークンは 8 時間利用可能で、クラスターで別の設定を行わない限り、イベントの発生元のリポジトリーにスコープが設定されます。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.