Knative 云原生应用开发指南

Version 0.11

使用 GitHub 事件源

前提条件

  • 您已经成功创建一个 Kubernetes 集群
  • 部署成功 Knative
  • 部署成功 Serving 组件, 并且完成域名配置。
  • 部署成功 Eventing 组件

操作步骤

部署 GitHub 事件源。

  1. 登录 容器服务管理控制台
  2. 在 Kubernetes 菜单下,单击左侧导航栏的Knative > 组件管理, 选择安装 GitHub addon 组件,如图所示 undefined

创建服务

  1. 单击左侧导航栏的Knative > 服务管理,进入服务管理页面。
  2. 右上角单击创建服务undefined
  3. 设置部署集群、命名空间、服务名称。选择所要使用的镜像和镜像的版本,如图: undefined
  • 镜像名称:registry.cn-shanghai.aliyuncs.com/knative-release/eventing-sources-event_display
  • 镜像版本:bf45b3eb1e7fc4cb63d6a5a6416cf696295484a7662e0cf9ccdf5c080542c21d
  1. 点击 创建按钮

创建 GitHub Token

创建 Personal access tokens, 用于访问 GitHub API。token 的名称可以任意设置。Source 需要开启 repo:public_repoadmin:repo_hook , 以便通过公共仓库触发 Event 事件,并为这些公共仓库创建 webhooks 。 下面是设置一个 “GitHubSource Sample” token 的示例。 undefined

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: personal_access_token_value
  secretToken: asdfasfdsaf

执行命令使其生效:

kubectl --namespace default apply --filename githubsecret.yaml

创建 GitHub 事件源

为了接收 GitHub 产生的事件, 需要创建 GitHubSource 用于接收事件。

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

执行 kubectl 命令:

kubectl --namespace default apply --filename github-source.yaml

验证结果

在 GitHub repository 中 Settings->Webhooks 查看会有一个验证成功的 Hook URL。注意:域名需要备案,否则无法进行访问。 undefined

在 GitHub repository 中 创建一个 pull request ,会产生Event事件,然后在 Knative Eventing 可以查看:

kubectl --namespace default get pods
kubectl --namespace default logs github-event-display-XXXX user-container

我们可以看到类似下面的事件结果:

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": ...}

总结

通过 Knative Eventing 对接 GitHub 事件源,可以感知代码 Merge、Issue 提交等事件,进而针对这些事件触发对于的服务进行处理。