GitLab Event Source for Knative
GitLab Source example shows how to wire GitLab events for consumption by a
Knative Service.
Deploy the GitLab source controller
We recommend to use ko tool to deploy GitLab
source:
ko apply -f gitlab/config/
Check that the manager is running:
kubectl -n knative-sources get pods gitlab-controller-manager-0
With the controller running you can now move on to a user persona and setup a
GitLab webhook as well as a function that will consume GitLab events.
Using the GitLab Event Source
You are now ready to use the Event Source and trigger functions based on GitLab
projects events.
We will:
- Create a Knative service which will receive the events. To keep things simple
this service will simply dump the events to
stdout
, this is the so-called:
event_display
- Create a GitLab access token and a random secret token used to secure the
webhooks
- Create the event source by posting a GitLab source object manifest to
Kubernetes
Create a Knative Service
Create a simple Knative service
that dumps incoming messages to its log. The
event-display.yaml file defines this basic service
which will receive the configured GitLab event from the GitLabSource object.
kubectl -n default apply -f samples/event-display.yaml
Create GitLab Tokens
-
Create a
personal access token
which the GitLab source will use to register webhooks with the GitLab API.
The token must have an "api" access scope in order to create repository
webhooks. Also decide on a secret token that your code will use to
authenticate the incoming webhooks from GitLab.
-
Update a secret defined in secret.yaml:
accessToken
is the personal access token created in step 1 and
secretToken
is any token of your choosing.
Hint: you can generate a random secretToken with:
head -c 8 /dev/urandom | base64
-
Apply the gitlabsecret using kubectl
.
kubectl -n default apply -f samples/secret.yaml
Create Event Source for GitLab Events
-
In order to receive GitLab events, you have to create a concrete Event Source
for a specific namespace. Replace the projectUrl
value in the file
gitlabsource.yaml with your GitLab username and
project name. For example, if your repo URL is
https://gitlab.com/knative-examples/functions
then use it as the value for
projectUrl
.
-
Apply the yaml file using kubectl
:
kubectl -n default apply -f samples/gitlabsource.yaml
Verify
Verify the GitLab webhook was created by looking at the list of webhooks under
Settings >> Integrations in your GitLab project. A hook should be listed
that points to your Knative cluster.
Create a push event and check the logs of the Pod backing the
gitlab-event-display
knative service. You will see the GitLab event:
☁️ cloudevents.Event
Validation: valid
Context Attributes,
specversion: 0.3
type: dev.knative.sources.gitlabsource.Push Hook
source: https://gitlab.com/<user>/<project>
id: f83c080f-c2af-48ff-8d8b-fd5b21c5938e
time: 2020-03-12T11:08:41.414572482Z
datacontenttype: application/json
Data,
{
<Event payload>
}