Knative で GitHub イベントソースを作成して、GitHub からのイベントを受信できます。このイベントソースは、継続的インテグレーションと継続的デリバリー (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 | base64githubsecret.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 github-source.yaml
手順 3: 結果の確認
GitHub リポジトリで、 を選択し、確認済みのフック URL を確認します。
説明ドメイン名にはインターネットコンテンツプロバイダー (ICP) 番号が必要です。
GitHub リポジトリで次のコマンドを実行して、
pull requestを作成します。すると、イベントがトリガーされます。kubectl --namespace default get pods kubectl --namespace default logs github-event-display-XXXX user-containerKnative 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 のイベントドリブン機能の使用を参照してください。