Knative で GitHub イベントソースを作成して、push
、pull_request
、issue_comment
などの GitHub Webhook イベントをキャプチャし、それらをリアルタイムで CloudEvents 準拠のイベントストリームに変換できます。 このアプローチにより、継続的インテグレーションと継続的デリバリー ( CI/CD ) パイプライン、データ同期、自動テストなどのシナリオ向けのイベント駆動型アプリケーションを構築できます。
前提条件
Knative サービスが作成されていること。この例では、「Knative アプリケーションを迅速にデプロイする」を使用しています。
Knative Eventing と GitHub アドオンがデプロイされています。詳細については、「Knative コンポーネントを管理する」をご参照ください。
Knative でカスタムドメイン名が設定されていること。詳細については、「カスタムドメイン名を設定する」をご参照ください。
手順 1:GitHub トークンを作成する
GitHub API を呼び出すためのパーソナルアクセストークンを作成します。
詳細については、「パーソナルアクセストークン」をご参照ください。
次の図は、GitHubSource Sample という名前のトークンを作成する方法を示しています。
カスタムトークン名を入力します。
パブリックリポジトリからイベントをトリガーし、これらのリポジトリの Webhook を作成するには、
repo:public_repo
とadmin:repo_hook
を選択します。
以下の方法を使用して、ランダムな文字列を secretToken として生成します。
head -c 8 /dev/urandom | base64
githubsecret.yaml ファイルを更新します。
生成されたトークンが personal_access_token_value の場合は、secretToken フィールドを設定する必要があります。例:
apiVersion: v1 kind: Secret metadata: name: githubsecret type: Opaque stringData: accessToken: GitHubSourceSample secretToken: rVzY0DQ5AM8=
apiVersion: v1 kind: Secret metadata: name: githubsecret type: Opaque stringData: accessToken: personal_access_token_value secretToken: asdfasfdsaf
次のコマンドを実行して、GitHub トークンを作成します。
kubectl apply -f githubsecret.yaml --namespace default
手順 2:GitHub イベントソースを作成する
GitHub によって生成されたイベントを受信するために、GitHub イベントソースを作成できます。
github-source.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。
apiVersion: sources.eventing.knative.dev/v1alpha1 kind: GitHubSource metadata: name: githubsourcesample spec: eventTypes: - pull_request ownerAndRepository: <YOUR USER>/<YOUR REPO> # <YOUR USER> を GitHub ユーザー名に、<YOUR REPO> を GitHub リポジトリ名に置き換えます。 accessToken: secretKeyRef: name: githubsecret key: accessToken secretToken: secretKeyRef: name: githubsecret key: secretToken sink: apiVersion: serving.knative.dev/v1alpha1 kind: Service name: github-event-display
次のコマンドを実行して、デフォルトの名前空間に GitHub イベントソースを作成します。
kubectl --namespace default apply -f github-source.yaml
結果の確認
GitHub リポジトリで、
を選択し、確認済みのフック URL を確認します。説明ドメイン名には、インターネットコンテンツプロバイダー ( ICP ) 番号が必要です。
GitHub リポジトリで次のコマンドを実行して
pull request
を作成します。 これによりイベントがトリガーされます。kubectl --namespace default get pods kubectl --namespace default logs github-event-display-XXXX user-container
Knative Eventing では、イベントの詳細を表示できます。
2018/11/08 18:25:34 Message Dumper received a message: POST / HTTP/1.1 Host: github-event-display.knative-demo.svc.cluster.local Accept-Encoding: gzip Ce-Cloudeventsversion: 0.1 Ce-Eventid: a8d4cf20-e383-11e8-8069-46e3c8ad**** Ce-Eventtime: 2018-11-08T18:25:32.819548012Z Ce-Eventtype: dev.knative.source.github.pull_request Ce-Source: https://github.com/someuser/somerepo/pull/1 Content-Length: 21060 Content-Type: application/json User-Agent: Go-http-client/1.1 X-B3-Parentspanid: b2e514c3dbe94c03 X-B3-Sampled: 1 X-B3-Spanid: c85e346d89c8be4e X-B3-Traceid: abf6292d458fb8e7 X-Envoy-Expected-Rq-Timeout-Ms: 60000 X-Envoy-Internal: true X-Forwarded-For: 12*.*.*.*, 12*.*.*.* X-Forwarded-Proto: http X-Request-Id: 8a2201af-5075-9447-b593-ec3a243a**** {"action":"opened","number":1,"pull_request": ...}
参照
EventBridge イベントソースを介してイベントをトリガーすることもできます。詳細については、「Knative でイベント駆動型アーキテクチャに EventBridge を使用する」をご参照ください。