docs(ex04): add optional git webhook trigger flow
This commit is contained in:
parent
0212f4bd67
commit
3f96b2fd66
1 changed files with 189 additions and 0 deletions
|
|
@ -362,6 +362,194 @@ De naam van een PipelineRun moet uniek zijn:
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Bonus: triggeren via Git webhook (optioneel)
|
||||||
|
|
||||||
|
Wil je dat Tekton automatisch runt bij een `git push`?
|
||||||
|
Dan gebruik je **Tekton Triggers** met een webhook endpoint.
|
||||||
|
|
||||||
|
Als je **GitHub** gebruikt, kun je onderstaande manifests direct volgen.
|
||||||
|
Gebruik je GitLab/Gitea/Bitbucket, dan blijft het patroon hetzelfde maar de interceptor/payload-mapping kan verschillen.
|
||||||
|
|
||||||
|
### 1. Triggers resources toevoegen
|
||||||
|
|
||||||
|
**`manifests/ci/triggers/kustomization.yaml`**
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
resources:
|
||||||
|
- https://storage.googleapis.com/tekton-releases/triggers/latest/release.yaml
|
||||||
|
- https://storage.googleapis.com/tekton-releases/triggers/latest/interceptors.yaml
|
||||||
|
- triggerbinding.yaml
|
||||||
|
- triggertemplate.yaml
|
||||||
|
- eventlistener.yaml
|
||||||
|
- ingress.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
**`manifests/ci/triggers/triggerbinding.yaml`**
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: triggers.tekton.dev/v1beta1
|
||||||
|
kind: TriggerBinding
|
||||||
|
metadata:
|
||||||
|
name: github-push-binding
|
||||||
|
namespace: tekton-pipelines
|
||||||
|
spec:
|
||||||
|
params:
|
||||||
|
- name: repo-url
|
||||||
|
value: $(body.repository.clone_url)
|
||||||
|
```
|
||||||
|
|
||||||
|
**`manifests/ci/triggers/triggertemplate.yaml`**
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: triggers.tekton.dev/v1beta1
|
||||||
|
kind: TriggerTemplate
|
||||||
|
metadata:
|
||||||
|
name: github-push-template
|
||||||
|
namespace: tekton-pipelines
|
||||||
|
spec:
|
||||||
|
params:
|
||||||
|
- name: repo-url
|
||||||
|
default: https://github.com/JOUW_USERNAME/JOUW_REPO.git
|
||||||
|
resourcetemplates:
|
||||||
|
- apiVersion: tekton.dev/v1
|
||||||
|
kind: PipelineRun
|
||||||
|
metadata:
|
||||||
|
generateName: webhook-bump-
|
||||||
|
namespace: tekton-pipelines
|
||||||
|
spec:
|
||||||
|
pipelineRef:
|
||||||
|
name: gitops-image-bump
|
||||||
|
taskRunTemplate:
|
||||||
|
serviceAccountName: pipeline-runner
|
||||||
|
params:
|
||||||
|
- name: repo-url
|
||||||
|
value: $(tt.params.repo-url)
|
||||||
|
- name: new-tag
|
||||||
|
value: "6.7.0"
|
||||||
|
- name: git-user-name
|
||||||
|
value: "Workshop Pipeline"
|
||||||
|
- name: git-user-email
|
||||||
|
value: "pipeline@workshop.local"
|
||||||
|
workspaces:
|
||||||
|
- name: source
|
||||||
|
volumeClaimTemplate:
|
||||||
|
spec:
|
||||||
|
accessModes: [ReadWriteOnce]
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 1Gi
|
||||||
|
- name: git-credentials
|
||||||
|
secret:
|
||||||
|
secretName: git-credentials
|
||||||
|
```
|
||||||
|
|
||||||
|
**`manifests/ci/triggers/eventlistener.yaml`**
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: triggers.tekton.dev/v1beta1
|
||||||
|
kind: EventListener
|
||||||
|
metadata:
|
||||||
|
name: github-push-listener
|
||||||
|
namespace: tekton-pipelines
|
||||||
|
spec:
|
||||||
|
serviceAccountName: pipeline-runner
|
||||||
|
triggers:
|
||||||
|
- name: on-push
|
||||||
|
interceptors:
|
||||||
|
- ref:
|
||||||
|
name: github
|
||||||
|
params:
|
||||||
|
- name: secretRef
|
||||||
|
value:
|
||||||
|
secretName: github-webhook-secret
|
||||||
|
secretKey: secretToken
|
||||||
|
- name: eventTypes
|
||||||
|
value:
|
||||||
|
- push
|
||||||
|
bindings:
|
||||||
|
- ref: github-push-binding
|
||||||
|
template:
|
||||||
|
ref: github-push-template
|
||||||
|
```
|
||||||
|
|
||||||
|
**`manifests/ci/triggers/ingress.yaml`**
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: tekton-triggers
|
||||||
|
namespace: tekton-pipelines
|
||||||
|
spec:
|
||||||
|
ingressClassName: nginx
|
||||||
|
rules:
|
||||||
|
- host: tekton-webhook.192.168.56.200.nip.io
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: el-github-push-listener
|
||||||
|
port:
|
||||||
|
number: 8080
|
||||||
|
```
|
||||||
|
|
||||||
|
**`apps/ci/tekton-triggers.yaml`**
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: tekton-triggers
|
||||||
|
namespace: argocd
|
||||||
|
annotations:
|
||||||
|
argocd.argoproj.io/sync-wave: "8"
|
||||||
|
spec:
|
||||||
|
project: workshop
|
||||||
|
source:
|
||||||
|
repoURL: JOUW_FORK_URL
|
||||||
|
targetRevision: HEAD
|
||||||
|
path: manifests/ci/triggers
|
||||||
|
destination:
|
||||||
|
server: https://kubernetes.default.svc
|
||||||
|
namespace: tekton-pipelines
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
selfHeal: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
|
```
|
||||||
|
|
||||||
|
> **HOST**
|
||||||
|
> ```bash
|
||||||
|
> git add apps/ci/tekton-triggers.yaml manifests/ci/triggers/
|
||||||
|
> git commit -m "feat: voeg Tekton Triggers webhook flow toe"
|
||||||
|
> git push
|
||||||
|
> ```
|
||||||
|
|
||||||
|
### 2. Webhook secret zetten
|
||||||
|
|
||||||
|
> **VM**
|
||||||
|
> ```bash
|
||||||
|
> kubectl -n tekton-pipelines create secret generic github-webhook-secret \
|
||||||
|
> --from-literal=secretToken='kies-een-sterke-random-string' \
|
||||||
|
> --dry-run=client -o yaml | kubectl apply -f -
|
||||||
|
> ```
|
||||||
|
|
||||||
|
### 3. GitHub webhook registreren
|
||||||
|
|
||||||
|
- In GitHub: **Settings → Webhooks → Add webhook**
|
||||||
|
- Payload URL: `http://tekton-webhook.192.168.56.200.nip.io`
|
||||||
|
- Content type: `application/json`
|
||||||
|
- Secret: dezelfde waarde als `secretToken`
|
||||||
|
- Event: **Just the push event**
|
||||||
|
|
||||||
|
Daarna maakt elke push een nieuwe `PipelineRun` aan.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Probleemoplossing
|
## Probleemoplossing
|
||||||
|
|
||||||
| Symptoom | Oplossing |
|
| Symptoom | Oplossing |
|
||||||
|
|
@ -372,6 +560,7 @@ De naam van een PipelineRun moet uniek zijn:
|
||||||
| ArgoCD synchroniseert niet | Klik **Refresh** in de UI |
|
| ArgoCD synchroniseert niet | Klik **Refresh** in de UI |
|
||||||
| `root` blijft OutOfSync op app `tekton` | Verwijder de lege `kustomize: {}` uit `apps/ci/tekton.yaml` (Argo normaliseert deze weg in live state) |
|
| `root` blijft OutOfSync op app `tekton` | Verwijder de lege `kustomize: {}` uit `apps/ci/tekton.yaml` (Argo normaliseert deze weg in live state) |
|
||||||
| Tekton Dashboard toont standaard Nginx/404 | Controleer `apps/ci/tekton-dashboard.yaml` en `manifests/ci/dashboard/ingress.yaml` host/service/poort |
|
| Tekton Dashboard toont standaard Nginx/404 | Controleer `apps/ci/tekton-dashboard.yaml` en `manifests/ci/dashboard/ingress.yaml` host/service/poort |
|
||||||
|
| Webhook maakt geen PipelineRun aan | Check `kubectl get eventlistener -n tekton-pipelines` en controleer GitHub webhook URL/secret/eventtype |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue