[Book] [OK!] GitOps Cookbook: 08. Advanced Topics: 8.3 Trigger the Deployment of an Application Automatically (Argo CD Webhooks)


Задача:
Немедленный деплой приложения при изменении в git


Делаю:
2025.12.10


Установка gitea в minikube


Import the Pac-Man manifests repo into Gitea.

GetTea -> New Migration -> GitHub

https://github.com/gitops-cookbook/pacman-kikd-manifests


$ argocd app create pacman-webhook \
--repo http://gitea.192.168.49.2.nip.io/gitea_admin/pacman-kikd-manifests.git \
--dest-server https://kubernetes.default.svc \
--dest-namespace default \
--path k8s \
--sync-policy auto


REPO -> Settings -> Webhooks -> Add Webhook -> GitTea


// В книге опечатка, д.б. webhook
// Обращаюсь по ingress
• Payload URL: http://argocd.192.168.49.2.nip.io/api/webhook
• Content type: application/json


$ kubectl logs -n argocd -l app.kubernetes.io/name=argocd-server --tail=50 -f
time="2025-12-10T00:03:55Z" level=info msg="Received push event repo: http://gitea.192.168.49.2.nip.io/gitea_admin/pacman-kikd-manifests, revision: main, touchedHead: true"
time="2025-12-10T00:03:55Z" level=info msg="Requested app 'pacman-webhook' refresh"
failed to create fsnotify watcher: too many open files


// FIX: failed to create fsnotify watcher: too many open files
$ sudo sysctl fs.inotify.max_user_instances=8192
$ sudo sysctl fs.inotify.max_user_watches=524288


$ argocd app get pacman-webhook
Name:               argocd/pacman-webhook
Project:            default
Server:             https://kubernetes.default.svc
Namespace:          default
URL:                https://argocd.example.com/applications/pacman-webhook
Source:
- Repo:             http://gitea.192.168.49.2.nip.io/gitea_admin/pacman-kikd-manifests.git
  Target:
  Path:             k8s
SyncWindow:         Sync Allowed
Sync Policy:        Automated
Sync Status:        Synced to  (298574a)
Health Status:      Healthy

GROUP  KIND        NAMESPACE  NAME         STATUS   HEALTH   HOOK  MESSAGE
       Namespace   default    pacman       Running  Synced         namespace/pacman created
       Service     pacman     pacman-kikd  Synced   Healthy        service/pacman-kikd created
apps   Deployment  default    pacman-kikd  Synced   Healthy        deployment.apps/pacman-kikd created
       Namespace              pacman       Synced


$ argocd app diff pacman-webhook


// Заметил неправильный URL для argocd
$ kubectl patch cm argocd-cm -n argocd --type merge -p '{"data":{"url":"http://argocd.192.168.49.2.nip.io"}}'


$ argocd app get pacman-webhook
Name:               argocd/pacman-webhook
Project:            default
Server:             https://kubernetes.default.svc
Namespace:          default
URL:                http://argocd.192.168.49.2.nip.io/applications/pacman-webhook
Source:
- Repo:             http://gitea.192.168.49.2.nip.io/gitea_admin/pacman-kikd-manifests.git
  Target:
  Path:             k8s
SyncWindow:         Sync Allowed
Sync Policy:        Automated
Sync Status:        Synced to  (298574a)
Health Status:      Healthy

GROUP  KIND        NAMESPACE  NAME         STATUS   HEALTH   HOOK  MESSAGE
       Namespace   default    pacman       Running  Synced         namespace/pacman created
       Service     pacman     pacman-kikd  Synced   Healthy        service/pacman-kikd created
apps   Deployment  default    pacman-kikd  Synced   Healthy        deployment.apps/pacman-kikd created
       Namespace              pacman       Synced


В репо в k8s/pacman-deployment.yaml меняю на:

image: quay.io/gitops-cookbook/pacman-kikd:1.2.0


И сразу запускается обновление pod.


$ argocd app delete pacman-webhook