1.3.6. Trigger
Trigger を Pipeline と併用して、Kubernetes リソースで CI/CD 実行全体を定義する本格的な CI/CD システムを作成します。Pipeline の Trigger は外部イベントをキャプチャーし、それらのイベントを処理して情報の主要な部分を抽出します。このイベントデータを事前に定義されたパラメーターのセットにマップすると、Kubernetes リソースを作成し、デプロイできる一連のタスクがトリガーされます。
たとえば、アプリケーションの Red Hat OpenShift Pipelines を使用して CI/CD ワークフローを定義します。アプリケーションリポジトリーで新たな変更を有効にするには、PipelineRun を開始する必要があります。Trigger は変更イベントをキャプチャーし、処理することにより、また新規イメージを最新の変更でデプロイする PipelineRun をトリガーして、このプロセスを自動化します。
Trigger は、再利用可能で分離した自律型 CI/CD システムを設定するように連携する以下の主なコンポーネントで設定されています。
- EventListener は、JSON ペイロードを含む受信 HTTP ベースイベントをリッスンするエンドポイントまたはイベントシンクを提供します。EventListener は、Event インターセプターを使用してペイロードで軽量イベント処理を実行します。これはペイロードのタイプを特定し、オプションでこれを変更します。現在、Pipeline Trigger は Webhook インターセプター、GitHub インターセプター、GitLab インターセプター、および Common Expression Language (CEL) インターセプターの 4 種類のインターセプターをサポートします。
- TriggerBinding は、イベントペイロードからフィールドを抽出し、それらをパラメーターとして保存します。
- TriggerTemplate は、TriggerBinding からパラメーター化されたデータを使用する方法を指定します。TriggerTemplate は、TriggerBinding から入力を受信し、新規 PipelineResources の作成および新規 PipelineRun の開始につながる一連のアクションを実行するリソーステンプレートを定義します。
EventListener は、TriggerBinding と TriggerTemplate の概念を関連付けます。EventListener は受信イベントをリッスンし、インターセプターを使用して基本的なフィルターを処理し、TriggerBinding を使用してデータを抽出してから、TriggerTemplate を使用して Kubernetes リソースを作成するためにデータを処理します。
以下の例は、vote-app-binding TriggerBinding のコードスニペットを示しています。これは、受信イベントペイロードから Git リポジトリー情報を抽出します。
apiVersion: triggers.tekton.dev/v1alpha1
kind: TriggerBinding
metadata:
name: vote-app
spec:
params:
- name: git-repo-url
value: $(body.repository.url)
- name: git-repo-name
value: $(body.repository.name)
- name: git-revision
value: $(body.head_commit.id)
以下の例は vote-app-template TriggerTemplate のコードスニペットを示しています。これは、TriggerBinding から受信される Git リポジトリー情報から Pipeline リソースを作成します。
apiVersion: triggers.tekton.dev/v1alpha1
kind: TriggerTemplate
metadata:
name: vote-app
spec:
params:
- name: git-repo-url
description: The git repository url
- name: git-revision
description: The git revision
default: master
- name: git-repo-name
description: The name of the deployment to be created / patched
resourcetemplates:
- 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
persistentvolumeclaim:
claimName: source-pvc
以下の例は、受信イベントを処理するために vote-app-binding TriggerBinding および vote-app-template TriggerTemplate を使用する EventListener を示しています。
apiVersion: triggers.tekton.dev/v1alpha1
kind: EventListener
metadata:
name: vote-app
spec:
serviceAccountName: pipeline
triggers:
- bindings:
- ref: vote-app
template:
name: vote-app