您可以在Knative中建立GitHub事件來源(GitHubSource),用於接收GitHub產生的Event事件,適用於CI/CD、資料同步、自動化測試等情境。
前提條件
已建立一個Knative服務。本文以快速部署一個Knative服務中的服務為樣本。
已部署Eventing組件及GitHub add-on組件,請參見管理Knative組件。
已在Knative中使用自訂網域名並完成網域名稱配置,請參見使用自訂網域名。
步驟一:建立GitHub Token
建立Personal Access Token,用於訪問GitHub API。
更多資訊,請參見Personal access tokens。
下文以設定一個GitHubSource Sample Token為例。
自訂Token的名稱。
需要開啟
repo:public_repo
和admin:repo_hook
,以便通過公用倉庫觸發Event事件,並為這些公用倉庫建立Webhooks。
基於secretToken內容通過以下方式產生隨機字串。
head -c 8 /dev/urandom | base64
更新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
執行以下命令,建立GitHub Token。
kubectl apply -f githubsecret.yaml --namespace default
步驟三:建立GitHub事件來源
您可以建立GitHubSource用於接收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
執行以下命令,在命名空間default中建立GitHubSource。
kubectl --namespace default apply github-source.yaml
結果驗證
在GitHub repository中選擇
,查看驗證成功的Hook URL。說明網域名稱需已完成備案。
在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事件來源。