Tekton TriggersはWebリクエストからビルドパラメータを抽出し、Pipelineを起動する機能を提供しています。
EventListenerがHTTPリクエストを待ち受け、Triggerのルールに従ってPipelineを起動します。
- HTTPリクエストは、JSONをPOSTする想定
 - InterceptorによりTriggerをルーティングする
 
Interceptorによるルーティング
EventListenerには複数のTriggerを定義でき、
CELインターセプターのfilterを利用すると起動するPipelineを分岐できます。
この点のドキュメントがなく、非常に分かりづらいポイントです。
apiVersion: triggers.tekton.dev/v1beta1
kind: EventListener
spec:
  triggers:
  - name: trigger-a
    interceptors:
    - ref:
        name: cel
      params:
      - name: filter
        value: "header.match('X-Tekton-Type', 'service-a')"
    bindings:
    - ref: binding-service-a
    template:
      ref: template-service-a
  - name: trigger-b
    interceptors:
    - ref:
        name: cel
      params:
      - name: filter
        value: "header.match('X-Tekton-Type', 'service-b')"
    bindings:
    - ref: binding-service-b
    template:
      ref: template-service-b
この例では、X-Tekton-Typeという独自定義のHTTPヘッダーにサービス名を指定することで、起動するPipelineを選択する構成にしています。
フィルタの対象は任意のHTTPリクエストパラメータを指定できます。
ヘッダーの場合、curlコマンドでは-H 'X-Tekton-Type:service-a'のように指定でき、クライアントスクリプトが分かりやすいメリットがあります。
リポジトリURLなどのパラメータは、リクエストボディのJSONに記載し、 Trigger Bindingで抽出します。
ポイント
実はルーティングはInterceptorで実装できます。
Interceptorは他にもgitプロバイダに対応するものがあり、ショートハンドを提供しています。
CELを利用すると、単なるgit hookのスクリプトからcurlなどでCI起動のリクエストをコールできます。
	⁋ 2021/10/03↻ 2021/10/02