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 1
kind: TriggerBinding 2
metadata:
  name: vote-app 3
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)
1
TriggerBinding API バージョン v1alpha1
2
Kubernetes オブジェクトのタイプを指定します。この例では、TriggerBinding です。
3
この TriggerBinding を識別する一意の名前。
4
受信イベントペイロードから抽出され、TriggerTemplate に渡されるパラメーターの一覧。この例では、Git リポジトリー URL、名前、およびリビジョンはイベントペイロードの本体から抽出されます。

以下の例は vote-app-template TriggerTemplate のコードスニペットを示しています。これは、TriggerBinding から受信される Git リポジトリー情報から Pipeline リソースを作成します。

apiVersion: triggers.tekton.dev/v1alpha1 1
kind: TriggerTemplate 2
metadata:
  name: vote-app 3
spec:
  params: 4
  - 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: 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
        persistentvolumeclaim:
          claimName: source-pvc
1
TriggerTemplate API バージョン v1alpha1
2
Kubernetes オブジェクトのタイプを指定します。この例では、TriggerTemplate です。
3
この TriggerTemplate を識別する一意の名前。
4
TriggerBinding または EventListerner によって提供されるパラメーター。
5
TriggerBinding または EventListener で受信されるパラメーターから Pipeline 用に作成されるリソーステンプレートの一覧。

以下の例は、受信イベントを処理するために vote-app-binding TriggerBinding および vote-app-template TriggerTemplate を使用する EventListener を示しています。

apiVersion: triggers.tekton.dev/v1alpha1 1
kind: EventListener 2
metadata:
  name: vote-app 3
spec:
  serviceAccountName: pipeline 4
  triggers:
  - bindings: 5
    - ref: vote-app
    template: 6
      name: vote-app
1
EventListener API バージョン v1alpha1
2
Kubernetes オブジェクトのタイプを指定します。この例では、EventListener です。
3
この EventListener を識別する一意の名前。
4
使用されるサービスアカウント名。
5
この EventListener に使用される TriggerBinding の名前。
6
この Eventlistener に使用される Triggertemplate の名前。