GitHub source

    1. Set up Knative Serving.
    2. Ensure Knative Serving is that allows GitHub to call into the cluster.
    3. If you’re using GKE, you’ll also want to assign a static IP address.
    4. Set up with the GitHub source.

    To verify the GitHub source is working, create a simple Knative Service that dumps incoming messages to its log. The file defines this basic Service.

    Enter the following command to create the service from service.yaml:

    1. kubectl --namespace default apply --filename service.yaml

    Create GitHub Tokens

    Create a 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:

    1. apiVersion: v1
    2. kind: Secret
    3. metadata:
    4. name: githubsecret
    5. type: Opaque
    6. stringData:
    7. accessToken: personal_access_token_value
    8. secretToken: asdfasfdsaf

    Hint: you can makeup a random secretToken with:

    Then, apply the githubsecret using kubectl:

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

    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

    1. apiVersion: sources.knative.dev/v1alpha1
    2. name: githubsourcesample
    3. spec:
    4. eventTypes:
    5. - pull_request
    6. ownerAndRepository: <YOUR USER>/<YOUR REPO>
    7. accessToken:
    8. secretKeyRef:
    9. name: githubsecret
    10. key: accessToken
    11. secretToken:
    12. secretKeyRef:
    13. name: githubsecret
    14. key: secretToken
    15. sink:
    16. ref:
    17. apiVersion: serving.knative.dev/v1
    18. kind: Service
    19. name: github-message-dumper

    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 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.

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

    You should log lines similar to:

    1. Accept-Encoding: gzip
    2. Ce-Cloudeventsversion: 0.1
    3. Ce-Eventid: a8d4cf20-e383-11e8-8069-46e3c8ad2b4d
    4. Ce-Eventtime: 2018-11-08T18:25:32.819548012Z
    5. Ce-Eventtype: dev.knative.source.github.pull_request
    6. Ce-Source: https://github.com/someuser/somerepo/pull/1
    7. Content-Length: 21060
    8. Content-Type: application/json
    9. User-Agent: Go-http-client/1.1
    10. X-B3-Parentspanid: b2e514c3dbe94c03
    11. X-B3-Sampled: 1
    12. X-B3-Spanid: c85e346d89c8be4e
    13. X-B3-Traceid: abf6292d458fb8e7
    14. X-Envoy-Expected-Rq-Timeout-Ms: 60000
    15. X-Envoy-Internal: true
    16. X-Forwarded-For: 127.0.0.1, 127.0.0.1
    17. X-Forwarded-Proto: http
    18. X-Request-Id: 8a2201af-5075-9447-b593-ec3a243aff52
    19. {"action":"opened","number":1,"pull_request": ...}

    Cleanup

    You can remove the Github webhook by deleting the Github source:

    1. kubectl --namespace default delete --filename githubsecret.yaml