OpenShift Pipelines Lab - Tekton Triggers

Triggers の追加

Tekton Trigger をパイプラインと組み合わせることで、パイプラインをフックして外部の github イベント(プッシュイベント、プルリクエストなど)に連動させることができます。

プロジェクトに TriggerTemplate、TriggerBinding、EventListener を追加します。

Trigger Template

TriggerTemplate は、テンプレートのリソース内の任意の場所に代入できるパラメータを持つリソースです。

各マニフェストのプロジェクト名に注意してください。各マニュフェスト中のプロジェクト名 pipelines-test を、お使いのプロジェクト名に修正してください。

  • PipelinesTrigger作成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 でそれらを置き換えることができます。

  • PipelinesTrigger作成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)をします。

  • PipelinesTrigger作成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分前"の表示になれば完了です。

triggers eventlistener
  • 以下のコマンドを実行し、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 を設定するため、 フロントエンド のソースコードリポジトリをフォークします。

triggers fork
  • GitHub でフォークしたレポジトリへ移動し、Webhook を設定します。

    1. フォークしたレポジトリをGithubで開く。

    2. Settings(右上) → Webhook(左ペイン) → Add Webhook(右上)

    3. Webhook設定画面で、以下を設定します。

      1. URL:先ほど公開したroute のURLを設定します

      2. Content type: application/json

      3. Secret:1234567

    4. Add Webhook をクリック

triggers webhook config 1
triggers webhook config 2
triggers webhook config 3
triggers webhook config 4
triggers webhook config 5
triggers webhook status

Trigger pipeline Run

フロントエンド で仮の Push イベントを実行し、Pipelines を発火させます。

発火シーケンスは以下になります。

  1. pipelines-vote-ui GitHub リポジトリに Push されると、設定された webhook は、イベントのペイロードを Route (公開された EventListener ) にプッシュします。

  2. Event-Listener は、TriggerBinding と TriggerTemplate にイベントを渡します。

  3. TriggerBinding は、TriggerTemplate のレンダリングに必要なパラメータを抽出します。

  4. TriggerTemplateのレンダリングに成功すると、PipelineRun(build-deploy-vote-api)が作成されます。

手順

  • vote-uiリポジトリに新規ファイルを作成することで、コミットをプッシュします。

    1. ブラウザにてフォークしたvote-uiリポジトリを開きます。

    2. ページ上部の Add file をクリックし、ドロップダウンから Create new file を選択します。

      add git file 1
    3. 上部のファイル名欄に任意のファイル名を入力し(画像例ではtest.txt)、 Commit changes…​ をクリックします。

      add git file 2
    4. ポップアップが表示されるため、デフォルトの状態のまま Commit changes をクリックします。

    add git file 3
  • 作成したWebhookの画面にて Recent Deliveries タブを確認し、GitHub UIから Push イベント が作成されていることを確認します。

triggers webhook run 2
  • OpenShift Web コンソールから PipelineRun が作成されていることを確認します。

triggers webhook run 1
  • OpenShift Web コンソールから PipelineRun が無事完了していることを確認します。

triggers webhook run 3