Skip to content

ArgoCD Operations

ArgoCD manages GitOps deployments for the cluster. This document covers operational procedures for ArgoCD.

ArgoCD receives push notifications from GitHub via webhook to trigger immediate syncs (instead of waiting for polling).

GitHub (org webhook) → Cloudflare Tunnel → ArgoCD Server
push event argocd-wh.fzymgc.net /api/webhook

Prerequisites:

  • Cloudflare Tunnel deployed and healthy
  • ArgoCD running with webhook secret configured

Step 1: Get webhook secret from Vault

Terminal window
vault kv get -field=webhook.github.secret secret/fzymgc-house/cluster/argocd

Step 2: Configure GitHub organization webhook

  1. Go to: https://github.com/organizations/fzymgc-house/settings/hooks
  2. Click “Add webhook”
  3. Configure:
FieldValue
Payload URLhttps://argocd-wh.fzymgc.net/api/webhook
Content typeapplication/json
Secret(paste from Step 1)
Events”Just the push event”
Active
  1. Click “Add webhook”

Step 3: Verify webhook delivery

  1. Push to any fzymgc-house repository
  2. Check webhook deliveries at: https://github.com/organizations/fzymgc-house/settings/hooks
  3. Look for green checkmark and 200 response
TestCommandExpected
DNS resolvesdig argocd-wh.fzymgc.netCNAME to cfargotunnel.com
Endpoint reachablecurl -I https://argocd-wh.fzymgc.net/api/webhook400 (missing payload) or 200
Webhook deliveryPush to repo, check GitHubGreen ✓, 200 response
ArgoCD refreshCheck app sync after pushImmediate (not 3-min delay)
SymptomCauseFix
401/403 responseWebhook secret mismatchVerify secret in Vault matches GitHub config
404 responseTunnel route missingCheck Cloudflare Tunnel ingress config
502 responseArgoCD unreachableCheck argocd-server pod status
No sync after pushRepo URL mismatchVerify Application repo URL matches webhook source

Check ArgoCD logs for webhook activity:

Terminal window
kubectl logs -n argocd -l app.kubernetes.io/name=argocd-server --tail=100 | rg -i webhook

To revert to polling-only mode:

  1. Delete the GitHub organization webhook
  2. ArgoCD automatically falls back to polling (default: 3 minutes)

No ArgoCD configuration changes required.

Sync Pitfall: RespectIgnoreDifferences + array jqPathExpressions

Section titled “Sync Pitfall: RespectIgnoreDifferences + array jqPathExpressions”

Do not combine syncOptions: RespectIgnoreDifferences=true with ignoreDifferences.jqPathExpressions that address array elements (e.g. .spec.data[].remoteRef.conversionStrategy on ExternalSecrets). ArgoCD’s sync-time normalizer cannot merge arrays when items are added or removed — an upstream-acknowledged limitation (the TestNormalizeTargetResources case for new array entries is skipped as “limitation in the current implementation”). The failure mode: the sync reports Succeeded at the right revision, map-typed fields apply, but the live array silently keeps its old value. On ExternalSecrets this leaves ESO in SecretSyncedError (a synced template can end up referencing keys the stale spec.data doesn’t fetch) and the app sits OutOfSync indefinitely.

ignoreDifferences alone (without RespectIgnoreDifferences) still normalizes the diff, so schema-defaulted fields (ESO’s conversionStrategy/decodingStrategy/metadataPolicy) don’t cause perpetual OutOfSync — the sync simply applies the true desired manifest and the API server re-defaults those fields. The apps still carrying the option have additional ignore rules (StatefulSet volumeClaimTemplates server fields, CRD /status, Argo Workflow template inputs/outputs, webhook configs) pending individual analysis before removal.

To unstick a sync already in this state, apply the git-desired manifest with ArgoCD’s own field manager:

Terminal window
git show origin/main:<path-to-manifest> | \
kubectl apply --server-side --field-manager=argocd-controller --force-conflicts -f -
URLPurpose
https://argocd.fzymgc.houseWeb UI
https://argocd-wh.fzymgc.net/api/webhookGitHub webhook endpoint