ここでは、Knative を使用してGitHub イベントを処理する方法について説明します。

始める前に

  • Serving、Eventing、および GitHub アドオンコンポーネントがインストールされている必要があります。 詳細については、「Knative コンポーネントのデプロイ」をご参照ください。
  • Knative サービス用のカスタムドメインをセットアップし、ドメイン設定が完了している必要があります。 詳細については、「Knative でカスタムドメイン名を使用する」をご参照ください。

サービスの作成

  1. Container Service - Kubernetes 下の左側のナビゲーションペインで、[Knative] > [サービス] を選択します。 [Knative サービス管理] ページが表示されます。
  2. 右上隅にある、[サービスを作成]をクリックします。
  3. クラスター、名前空間、サービス名、イメージ名、およびイメージバージョンのパラメーターを設定します。
    この例では、パラメーターを次のように設定します。
    • サービス名: サービスの名前。 この例では、github-event-display と入力します。
    • イメージ名: [イメージの選択] をクリックします。 表示されるダイアログボックスで、イメージを選択し、[OK]をクリックします。 プライベートレジストリ URL を入力してイメージを指定することもできます。 形式は domainname/namespace/imagename:tag です。 この例では、registry.cn-shanghai.aliyuncs.com/knative-release/eventing-sources-event_display と入力します。
    • イメージバージョン: [イメージバージョンの選択] をクリックし、イメージバージョンを選択します。 このパラメーターが設定されていない場合、最新のイメージバージョンが使用されます。 この例では、bf45b3eb1e7fc4cb63d6a5a6416cf696295484a7662e0cf9ccdf5c080542c21d と入力します。
    その他のパラメーターについての詳細は、このドキュメントをご参照ください。
  4. [作成] をクリックします。

GitHubトークンの作成

  1. 個人用アクセストークンを作成します。
    個人用アクセストークンは、GitHub API へのアクセスに使用されます。 詳細については、「Personal access tokens」をご参照ください。
    次の例では、GitHubSource Sample という名前のトークンを作成します。GitHub トークンの作成
    パブリックリポジトリからイベントをトリガーし、それらのリポジトリの webhook を作成するには、repo:public_repoadmin:repo_hook スコープをクリックします。

    カスタムトークン名を入力することができます。

  2. kubectl を利用した Kubernetes クラスターへの接続.
  3. 次のメソッドを使用して、ランダム文字列を secretToken として生成します。
    head -c 8 /dev/urandom | base64
  4. githubsecret.yaml をこれらの値で更新します。
    アクセストークンが personal_access_token_valueで、secretToken を asdfasfdsaf として設定すると、githubsecret.yaml は次のようになります。例:
    apiVersion: v1
    kind: Secret
    metadata:
      name: githubsecret
    type: Opaque
    stringData:
      accessToken: personal_access_token_value
      secretToken: asdfasfdsaf
  5. 次のコマンドを実行して、GitHub トークンを作成します。
    kubectl --namespace default apply githubsecret.yaml

GitHub イベントのイベントソースの作成

GitHub イベントを受信するには、GitHubSource を作成する必要があります。

  1. kubectl を利用した Kubernetes クラスターへの接続.
  2. github-source.yaml ファイルを次の内容で作成します。
    apiVersion: sources.eventing.knative.dev/v1alpha1
    kind: GitHubSource
    metadata:
      name: githubsourcesample
    spec:
      eventTypes:
        - pull_request
      ownerAndRepository: <YOUR USER>/<YOUR REPO>
      accessToken:
        secretKeyRef:
          name: githubsecret
          key: accessToken
      secretToken:
        secretKeyRef:
          name: githubsecret
          key: secretToken
      sink:
        apiVersion: serving.knative.dev/v1alpha1
        kind: Service
        name: github-event-display
  3. 次のコマンドを実行して、デフォルトの名前空間に GitHubSource を作成します。
    kubectl --namespace default apply github-source.yaml

タスクの結果

GitHub リポジトリで、[Settings] > [Webhook] をクリックして緑色のチェックマークが付いたフック URL が表示されるかどうかを確認します。
ドメイン名の ICP 登録を取得する必要があります。 でなければ、アクセスすることができません。
次のコマンドを実行して pull request を GitHub リポジトリに作成します。 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-46e3c8ad2b4d
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: 127.0.0.1, 127.0.0.1
X-Forwarded-Proto: http
X-Request-Id: 8a2201af-5075-9447-b593-ec3a243aff52

{"action":"opened","number":1,"pull_request": ...}