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↻ 2024/11/07
中馬崇尋
Chuma Takahiro
Chuma Takahiro