| * Doc changes to githubsource for specifying API URL This commit introduces extra documentation to support the new functionality on githubsource where you can optionally specify the baseURL of the github api server - thus enabling the existing githubsource to be used against both public github and github enterprise. See https://github.com/knative/eventing-sources/pull/219 * Relative URL and quotes | ||
|---|---|---|
| .. | ||
| README.md | ||
| github-source.yaml | ||
| githubsecret.yaml | ||
| personal_access_token.png | ||
| service.yaml | ||
| webhook_created.png | ||
		
			
				
				README.md
			
		
		
			
			
		
	
	GitHub Source example
GitHub Source example shows how to wire GitHub events for consumption by a Knative Service.
Deployment Steps
Prerequisites
You will need:
- An internet-accessible Kubernetes cluster with Knative Serving installed. Follow the installation instructions if you need to create one.
- Ensure Knative Serving is configured with a domain name that allows GitHub to call into the cluster.
- If you're using GKE, you'll also want to assign a static IP address.
- Install Knative
Eventing. Those
instructions also install the default eventing sources, including
the GitHubSourcewe'll use.
Create a Knative Service
To verify the GitHubSource is working, we will create a simple Knative
Service that dumps incoming messages to its log. The service.yaml file
defines this basic service.
apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:
  name: github-message-dumper
spec:
  runLatest:
    configuration:
      revisionTemplate:
        spec:
          container:
            image: gcr.io/knative-releases/github.com/knative/eventing-sources/cmd/message_dumper
Enter the following command to create the service from service.yaml:
kubectl --namespace default apply --filename service.yaml
Create GitHub Tokens
Create a personal access token for GitHub that the GitHub source can use to register webhooks with the GitHub API. Also decide on a secret token that your code will use to authenticate the incoming webhooks from GitHub (secretToken).
The token can be named anything you find convenient. The Source
requires repo:public_repo and admin:repo_hook, to let it fire
events from your public repositories and to create webhooks for those
repositories. Copy and save this token; GitHub will force you to
generate it again if misplaced.
Here's an example for a token named "GitHubSource Sample" with the recommended scopes:
Update githubsecret.yaml with those values. If your generated access
token is 'personal_access_token_value' and you choose your secretToken
as 'asdfasfdsaf', you'd modify githubsecret.yaml like so:
apiVersion: v1
kind: Secret
metadata:
  name: githubsecret
type: Opaque
stringData:
  accessToken: personal_access_token_value
  secretToken: asdfasfdsaf
Hint: you can makeup a random secretToken with:
head -c 8 /dev/urandom | base64
Then, apply the githubsecret using kubectl:
kubectl --namespace default apply --filename githubsecret.yaml
Create Event Source for GitHub Events
In order to receive GitHub events, you have to create a concrete Event
Source for a specific namespace. Be sure to replace the
ownerAndRepository value with a valid GitHub public repository owned
by your GitHub user.
If using GitHub enterprise you will need to add an additional githubAPIURL field to the spec specifying your GitHub enterprise API endpoint, see here
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-message-dumper
Then, apply that yaml using kubectl:
kubectl --namespace default apply --filename github-source.yaml
Verify
Verify the GitHub webhook was created by looking at the list of webhooks under the Settings tab in your GitHub repository. A hook should be listed that points to your Knative cluster with a green check mark to the left of the hook URL, as shown below.
Create Events
Create a pull request in your GitHub repository. We will verify that the GitHub events were sent into the Knative eventing system by looking at our message dumper function logs.
kubectl --namespace default get pods
kubectl --namespace default logs github-message-dumper-XXXX user-container
You should log lines similar to:
2018/11/08 18:25:34 Message Dumper received a message: POST / HTTP/1.1
Host: github-message-dumper.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": ...}
Cleanup
You can remove the Github webhook by deleting the Github source:
kubectl --namespace default delete --filename github-source.yaml
Similarly, you can remove the Service and Secret via:
kubectl --namespace default delete --filename service.yaml
kubectl --namespace default delete --filename githubsecret.yaml

