KnativeでGitHubイベントソースを作成して、GitHubからイベントを受け取ることができます。 このイベントソースは、継続的インテグレーションと継続的配信 (CI/CD) 、データ同期、自動テストなどのシナリオに適しています。
前提条件
Knativeサービスが作成されます。 この例では、Knativeアプリケーションの迅速なデプロイを使用します。
Knative EventingとGitHubアドオンがデプロイされます。 詳細については、「Knativeコンポーネントの管理」をご参照ください。
カスタムドメイン名はKnativeで設定されています。 詳細については、「カスタムドメイン名の設定」をご参照ください。
ステップ1: GitHubトークンの作成
GitHub APIを呼び出すための個人用アクセストークンを作成します。
詳細については、「Personal access tokens」をご参照ください。
次の図は、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
ステップ3: 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> # Replace <YOUR USER> with your GitHub username and <YOUR REPO> with your GitHub repository name. 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 github-source.yaml
結果の検証
GitHubリポジトリで、
を選択し、確認済みのフックURLを確認します。説明ドメイン名には、インターネットコンテンツプロバイダ (ICP) 番号が必要です。
GitHubリポジトリで次のコマンドを実行し、
プルリクエスト
を作成します。 次に、イベントがトリガされる。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イベントソースを使用してイベントをトリガーすることもできます。 詳細については、「EventBridgeを使用してKnativeサービスをトリガーしてイベントを消費する」をご参照ください。