Using Webhooks Instead of Polling

By default, Fleet utilizes polling (default: 15 seconds) to pull from a Git repo.However, this can be configured to utilize a webhook instead.Fleet currently supports Github, GitLab, Bitbucket, Bitbucket Server and Gogs.

1. Configure the webhook service. Fleet uses a gitjob service to handle webhook requests. Create an ingress that points to the gitjob service.

  1. apiVersion: networking.k8s.io/v1
  2. kind: Ingress
  3. metadata:
  4. name: webhook-ingress
  5. namespace: cattle-fleet-system
  6. spec:
  7. rules:
  8. - host: your.domain.com
  9. http:
  10. paths:
  11. - path: /
  12. pathType: Prefix
  13. backend:
  14. service:
  15. name: gitjob
  16. port:
  17. number: 80

Using Webhooks Instead of Polling - 图1info

You can configure TLS on ingress.

2. Go to your webhook provider and configure the webhook callback url. Here is a Github example.

Using Webhooks Instead of Polling - 图2

Configuring a secret is optional. This is used to validate the webhook payload as the payload should not be trusted by default. If your webhook server is publicly accessible to the Internet, then it is recommended to configure the secret. If you do configure the secret, follow step 3.

Using Webhooks Instead of Polling - 图3note

only application/json is supported due to the limitation of webhook library.

Using Webhooks Instead of Polling - 图4caution

If you configured the webhook the polling interval will be automatically adjusted to 1 hour.

3. (Optional) Configure webhook secret. The secret is for validating webhook payload. Make sure to put it in a k8s secret called gitjob-webhook in cattle-fleet-system.

ProviderK8s Secret Key
GitHubgithub
GitLabgitlab
BitBucketbitbucket
BitBucketServerbitbucket-server
Gogsgogs

For example, to create a secret containing a GitHub secret to validate the webhook payload, run:

  1. kubectl create secret generic gitjob-webhook -n cattle-fleet-system --from-literal=github=webhooksecretvalue

4. Go to your git provider and test the connection. You should get a HTTP response code.