OpenShift Pipelines Lab - Tekton Triggers
Triggers の追加
Tekton Trigger をパイプラインと組み合わせることで、パイプラインをフックして外部の github イベント(プッシュイベント、プルリクエストなど)に連動させることができます。
プロジェクトに TriggerTemplate、TriggerBinding、EventListener を追加します。
Trigger Template
TriggerTemplate
は、テンプレートのリソース内の任意の場所に代入できるパラメータを持つリソースです。
各マニフェストのプロジェクト名に注意してください。各マニュフェスト中のプロジェクト名 |
-
Pipelines → Trigger → 作成 → TrigerTemplate を選択します。
-
以下の yaml を入力し、作成をクリックします
apiVersion: triggers.tekton.dev/v1beta1
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:
generateName: build-deploy-$(tt.params.git-repo-name)-
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-test/$(tt.params.git-repo-name)
workspaces:
- name: shared-workspace
volumeClaimTemplate:
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 500Mi
Trigger Binding
TriggerBindings は、イベントからフィールドを取得、パラメータとして保存することで、イベントが発生するたびに TriggerTemplate でそれらを置き換えることができます。
-
Pipelines → Trigger → 作成 → TriggerBinding を選択
-
以下の yaml を入力し、作成をクリックします。
apiVersion: triggers.tekton.dev/v1beta1
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)
マニフェスト内の必要なパラメータ値は、イベントのペイロード(例:GitHubのイベント)を調べることでわかります(後程実施)。
Webhook Secret の作成
EventListner に設定する Webhook の認証情報を Secret で設定します。
-
右上の [+] (YAMLのインポート)を選択します。
-
以下の yaml ファイルを貼り付けし 作成 を選択します。
apiVersion: v1
kind: Secret
metadata:
name: github-secret
type: Opaque
stringData:
secretToken: "1234567"
Trigger の作成
Trigger
は、TriggerTemplate、TriggerBindings、interceptors を結びつけたもので、EventListerner の部品です(Triggerに分けず、EventListerner にまとめて記載することもできます)。
これらは EventListener の内部で参照先(triggerRef)として使用されます。
今回の interceptors には、GitHub の Webhook 認証情報と Push のイベントフィルタを指定しておきます。
-
右上の [+] (YAMLのインポート)を選択します。
-
以下の yaml ファイルを貼り付けし 作成 を選択します。
apiVersion: triggers.tekton.dev/v1beta1
kind: Trigger
metadata:
name: vote-trigger
spec:
serviceAccountName: pipeline
interceptors:
- ref:
name: "github"
params:
- name: "secretRef"
value:
secretName: github-secret
secretKey: secretToken
- name: "eventTypes"
value: ["push"]
bindings:
- ref: vote-app
template:
ref: vote-app
Event Listenerの作成
EventListner
は、Service を作成し、イベントを検知するエンドポイントの役割(event-sink)をします。
-
Pipelines → Trigger → 作成 → EventLister を選択します。
-
以下の yaml を入力し、作成をクリックします。
apiVersion: triggers.tekton.dev/v1beta1
kind: EventListener
metadata:
name: vote-app
spec:
serviceAccountName: pipeline
triggers:
- triggerRef: vote-trigger
EventListenerは、Service をセットアップします。 外部からアクセスするために、Serviceを OpenShift の Route として公開し、一般にアクセスできるようにする必要があります。 |
-
EventListenerの作成完了まで待機します。"作成済み" 列が"x分前"の表示になれば完了です。
-
以下のコマンドを実行し、eventlistenerサービスをルートとして公開します。
oc expose svc el-vote-app -n pipelines-test
-
出力例
route.route.openshift.io/el-vote-app exposed
GitHub Webhook 設定
今回は バックエンド のソースコードリポジトリを更新し、パイプラインを発火させるための webhook-url を設定する必要があります。
-
以下のコマンドを実行し、webhook-urlを取得します。
echo "URL: $(oc get route el-vote-app -n pipelines-test --template='http://{{.spec.host}}')"
-
出力例
URL: http://el-vote-app-pipelines-test.apps.cluster-fmq8d.fmq8d.sandbox2725.opentlc.com
Webhook 設定 (GitHub側)
-
GitHub の Webhook を設定するため、 フロントエンド のソースコードリポジトリをフォークします。
-
GitHub でフォークしたレポジトリへ移動し、Webhook を設定します。
-
フォークしたレポジトリをGithubで開く。
-
Settings(右上) → Webhook(左ペイン) → Add Webhook(右上)
-
Webhook設定画面で、以下を設定します。
-
URL:先ほど公開したroute のURLを設定します
-
Content type:
application/json
-
Secret:
1234567
-
-
Add Webhook
をクリック
-
Trigger pipeline Run
フロントエンド で仮の Push イベントを実行し、Pipelines を発火させます。
発火シーケンスは以下になります。
-
pipelines-vote-ui GitHub リポジトリに Push されると、設定された webhook は、イベントのペイロードを Route (公開された EventListener ) にプッシュします。
-
Event-Listener は、TriggerBinding と TriggerTemplate にイベントを渡します。
-
TriggerBinding は、TriggerTemplate のレンダリングに必要なパラメータを抽出します。
-
TriggerTemplateのレンダリングに成功すると、PipelineRun(build-deploy-vote-api)が作成されます。
手順
-
vote-uiリポジトリに新規ファイルを作成することで、コミットをプッシュします。
-
ブラウザにてフォークしたvote-uiリポジトリを開きます。
-
ページ上部の Add file をクリックし、ドロップダウンから Create new file を選択します。
-
上部のファイル名欄に任意のファイル名を入力し(画像例ではtest.txt)、 Commit changes… をクリックします。
-
ポップアップが表示されるため、デフォルトの状態のまま Commit changes をクリックします。
-
-
作成したWebhookの画面にて Recent Deliveries タブを確認し、GitHub UIから Push イベント が作成されていることを確認します。
-
OpenShift Web コンソールから PipelineRun が作成されていることを確認します。
-
OpenShift Web コンソールから PipelineRun が無事完了していることを確認します。