全部產品
Search
文件中心

Container Service for Kubernetes:在Knative中使用GitHub事件來源

更新時間:Nov 15, 2024

您可以在Knative中建立GitHub事件來源(GitHubSource),用於接收GitHub產生的Event事件,適用於CI/CD、資料同步、自動化測試等情境。

前提條件

步驟一:建立GitHub Token

  1. 建立Personal Access Token,用於訪問GitHub API。

    更多資訊,請參見Personal access tokens

    下文以設定一個GitHubSource Sample Token為例。

    image.png

    建立github token

    • 自訂Token的名稱。

    • 需要開啟repo:public_repoadmin:repo_hook,以便通過公用倉庫觸發Event事件,並為這些公用倉庫建立Webhooks。

  2. 基於secretToken內容通過以下方式產生隨機字串。

    head -c 8 /dev/urandom | base64
  3. 更新githubsecret.yaml。

    如果產生的是personal_access_token_value Token,則需要設定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
  4. 執行以下命令,建立GitHub Token。

    kubectl apply -f githubsecret.yaml --namespace default

步驟三:建立GitHub事件來源

您可以建立GitHubSource用於接收GitHub產生的事件。

  1. 參見以下內容建立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
  2. 執行以下命令,在命名空間default中建立GitHubSource。

    kubectl --namespace default apply github-source.yaml

結果驗證

  1. 在GitHub repository中選擇Settings > Webhooks,查看驗證成功的Hook URL。

    說明

    網域名稱需已完成備案。

  2. 在GitHub repository中執行以下命令,建立一個pull request,產生對應的Event事件。

    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事件來源