3.2.2.6. トリガー
Trigger をパイプラインと併用して、Kubernetes リソースで CI/CD 実行全体を定義する本格的な CI/CD システムを作成します。Trigger は、Git プルリクエストなどの外部イベントをキャプチャーし、それらのイベントを処理して情報の主要な部分を抽出します。このイベントデータを事前に定義されたパラメーターのセットにマップすると、Kubernetes リソースを作成およびデプロイし、パイプラインをインスタンス化できる一連のタスクがトリガーされます。
たとえば、アプリケーションの Red Hat OpenShift Pipelines を使用して CI/CD ワークフローを定義します。アプリケーションリポジトリーで新たな変更を有効にするには、パイプラインを開始する必要があります。トリガーは変更イベントをキャプチャーし、処理することにより、また新規イメージを最新の変更でデプロイするパイプライン実行をトリガーして、このプロセスを自動化します。
Trigger は、再利用可能で分離した自律型 CI/CD システムを設定するように連携する以下の主なリソースで設定されています。
TriggerBindingリソースはイベントを検証し、イベントペイロードからフィールドを抽出し、それらをパラメーターとして保存します。以下の例は、
TriggerBindingリソースのコードスニペットを示しています。これは、受信イベントペイロードから Git リポジトリー情報を抽出します。apiVersion: triggers.tekton.dev/v1alpha11 kind: TriggerBinding2 metadata: name: vote-app3 spec: params:4 - name: git-repo-url value: $(body.repository.url) - name: git-repo-name value: $(body.repository.name) - name: git-revision value: $(body.head_commit.id)TriggerTemplateリソースは、リソースの作成方法の標準として機能します。これは、TriggerBindingリソースからのパラメーター化されたデータが使用される方法を指定します。トリガーテンプレートは、トリガーバインディングから入力を受信し、新規パイプラインリソースの作成および新規パイプライン実行の開始につながる一連のアクションを実行します。以下の例は、
TriggerTemplateリソースのコードスニペットを示しています。これは、作成したTriggerBindingリソースから受信される Git リポジトリー情報を使用してパイプライン実行を作成します。apiVersion: triggers.tekton.dev/v1alpha11 kind: TriggerTemplate2 metadata: name: vote-app3 spec: params:4 - name: git-repo-url description: The git repository url - name: git-revision description: The git revision default: pipelines-1.4 - name: git-repo-name description: The name of the deployment to be created / patched resourcetemplates:5 - apiVersion: tekton.dev/v1beta1 kind: PipelineRun metadata: name: build-deploy-$(tt.params.git-repo-name)-$(uid) spec: serviceAccountName: pipeline pipelineRef: name: build-and-deploy params: - name: deployment-name value: $(tt.params.git-repo-name) - name: git-url value: $(tt.params.git-repo-url) - name: git-revision value: $(tt.params.git-revision) - name: IMAGE value: image-registry.openshift-image-registry.svc:5000/pipelines-tutorial/$(tt.params.git-repo-name) workspaces: - name: shared-workspace volumeClaimTemplate: spec: accessModes: - ReadWriteOnce resources: requests: storage: 500MiTriggerリソースはTriggerBindingおよびTriggerTemplateリソースを接続し、このTriggerリソースはEventListener仕様で参照されます。以下の例は、
TriggerBindingおよびTriggerTemplateリソースを接続するvote-triggerという名前のTriggerリソースのコードスニペットを示しています。apiVersion: triggers.tekton.dev/v1alpha11 kind: Trigger2 metadata: name: vote-trigger3 spec: serviceAccountName: pipeline4 bindings: - ref: vote-app5 template:6 ref: vote-appEventListenerは、JSON ペイロードを含む受信 HTTP ベースイベントをリッスンするエンドポイントまたはイベントシンクを提供します。これは各TriggerBindingリソースからイベントパラメーターを抽出し、次にこのデータを処理し、対応するTriggerTemplateリソースによって指定される Kubernetes リソースを作成します。EventListenerリソースは、イベントのinterceptorsを使用してペイロードで軽量イベント処理または基本的なフィルターを実行します。これはペイロードのタイプを特定し、オプションでこれを変更します。現時点で、パイプライントリガーは Webhook インターセプター、 GitHub インターセプター、 GitLab インターセプター、および Common Expression Language (CEL) インターセプター の 4 種類のインターセプターをサポートします。以下の例は、
vote-triggerという名前のTriggerリソースを参照するEventListenerリソースを示しています。apiVersion: triggers.tekton.dev/v1alpha11 kind: EventListener2 metadata: name: vote-app3 spec: serviceAccountName: pipeline4 triggers: - triggerRef: vote-trigger5
Red Hat OpenShift Pipelines のトリガーは、Eventlistener リソースへの HTTP(非セキュア) および HTTPS (セキュアな HTTP) 接続の両方をサポートします。セキュアな HTTPS 接続を使用すると、クラスター内外のエンドツーエンドのセキュアな接続を得ることができます。namespace の作成後に、operator.tekton.dev/enable-annotation=enabled ラベルを namespace に追加し、次に Trigger リソースおよび re-encrypt TLS 終端を使用するセキュアなルートを作成して、Eventlistener についてこのセキュアな HTTPS 接続を有効にできます。