Implements GitOps deployment workflows using Argo CD — sync policies, ApplicationSets, app-of-apps bootstrapping, and resource pruning for automated Kubernetes deployment pipelines.
Scanned 9/4/2026
Install to Claude Code
npx -y skills add paulpas/agent-skill-router --skill argo-cd-gitops-workflows --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Argo Cd Gitops Workflows?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/paulpas-argo-cd-gitops-workflows)More formats (shields.io, HTML) on the badges page.
---
name: argo-cd-gitops-workflows
description: Implements GitOps deployment workflows using Argo CD — sync policies, ApplicationSets, app-of-apps bootstrapping, and resource pruning for automated Kubernetes deployment pipelines.
license: MIT
compatibility: opencode
metadata:
version: "1.0.0"
domain: cncf
triggers: argo cd, gitops workflows, argo sync policies, app of apps, kubernetes deployment automation, argo pruning
role: implementation
scope: implementation
output-format: manifests
content-types: [code, config, examples, do-dont]
related-skills: cncf-helm-chart-development, cncf-kyverno, cncf-gitlab-ci-cd-pipelines, cncf-kubernetes-deployments-management
archetypes:
- tactical
- orchestration
anti_triggers:
- argo workflows engine
- argo rollouts progressive delivery
response_profile:
verbosity: low
directive_strength: high
abstraction_level: operational
---
# Argo CD GitOps Workflows
Implements GitOps deployment workflows using Argo CD for automated Kubernetes application delivery. Configures sync policies, ApplicationSets, app-of-apps bootstrapping, and resource pruning to maintain cluster state in lockstep with Git repositories.
## TL;DR Checklist
- [ ] Define Application CRD with explicit syncPolicy (automated: prune + selfHeal)
- [ ] Create ApplicationSet for fleet-wide deployments across environments
- [ ] Set up app-of-apps bootstrapping with namespace-scoped parent Application
- [ ] Configure pruning so Argo CD removes resources deleted from Git
- [ ] Define sync windows to control deployment timeframes per environment
- [ ] Implement custom health checks for application-specific readiness
---
## When to Use
Use this skill when:
- Setting up automated GitOps deployment pipelines with Argo CD
- Configuring sync policies (automated sync, pruning, self-healing) for Kubernetes applications
- Building fleet-wide deployments with ApplicationSets across multiple environments
- Implementing app-of-apps patterns to bootstrap clusters with a single Application manifest
- Managing resource pruning and garbage collection when manifests are removed from Git
- Defining sync windows to restrict deployment windows for compliance or cost control
- Writing custom health assessment scripts for application-specific readiness checks
---
## When NOT to Use
- For progressive/canary deployments — use `cncf-argo-rollouts` or `cncf-canary-deployment` instead
- For batch workflow orchestration (DAG pipelines, ML workflows) — use `cncf-argo` (Argo Workflows engine) instead
- For one-off deployments or manual rollbacks outside GitOps — Argo CD is designed for continuous reconciliation
- When GitOps is overkill for simple `kubectl apply` use cases with minimal team coordination
---
## Core Workflow
1. **Define the Application CRD** — Create an `Application` resource pointing to a Git repository, branch, and directory path. Set `syncPolicy.automated` with `prune: true` and `selfHeal: true` for full GitOps behavior. **Checkpoint:** Verify the repo URL, target revision, and path are correct before applying.
2. **Configure Sync Options** — Add `syncOptions` such as `CreateNamespace=true`, `PrunePropagationPolicy=foreground`, `PruneLast=true`, and `ApplyOutOfSyncOnly=true`. These control how Argo CD handles namespace creation, deletion ordering, and diff-based reconciliation. **Checkpoint:** Test sync options with `argocd app diff <app-name>` before enabling automated sync.
3. **Set Up Sync Windows** — Define `syncPolicy.syncWindows` to restrict when deployments can occur per environment (e.g., no deployments during business hours in production). Use `kinds: [ReplicaSet, Pod, *]` to scope the window. **Checkpoint:** Confirm window schedules align with change advisory board (CAB) policies.
4. **Create ApplicationSet for Fleet Deployments** — Use generators (Cluster, Git, List) to provision Application resources across environments. Example: a single `ApplicationSet` generates dev/staging/prod `Application` resources from a shared manifest directory. **Checkpoint:** Verify each generated Application resolves to the correct destination namespace and cluster.
5. **Implement App-of-Apps Bootstrap** — Create a root Application that references a directory containing child Application manifests. This enables bootstrapping an entire application topology from one file. **Checkpoint:** Confirm the parent Application syncs all children before deploying workloads.
6. **Write Custom Health Checks** — Define `healthChecks` for application resources that Argo CD cannot assess natively. Use Go-based scripts or CLI commands to verify application readiness beyond standard Kubernetes resource states. **Checkpoint:** Test health check logic against known healthy and unhealthy states.
7. **Monitor and Audit** — Use `argocd app history <name>` to review sync events, `argocd app logs <name>` for sync operation details, and enable audit logging for compliance tracking. **Checkpoint:** Ensure sync history is retained for the required period and accessible to operators.
---
## Implementation Patterns
### Pattern 1: Application with Automated Sync and Pruning
This is the foundational Argo CD Application CRD. It points to a Git repository and configures automated sync with pruning so the cluster state always matches Git.
```yaml
# Application with full GitOps automation
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: myapp-production
namespace: argocd
finalizers:
- resources-finalizer.argocd.argoproj.io
spec:
project: production
source:
repoURL: https://github.com/org/infrastructure.git
targetRevision: main
path: k8s/overlays/production
destination:
server: https://kubernetes.default.svc
namespace: myapp-prod
syncPolicy:
automated:
prune: true
selfHeal: true
allowEmpty: false
syncOptions:
- CreateNamespace=true
- PrunePropagationPolicy=foreground
- PruneLast=true
- ApplyOutOfSyncOnly=true
retry:
limit: 5
backoff:
duration: 5s
factor: 2
maxDuration: 3m
revisionHistoryLimit: 10
ignoreDifferences:
- group: apps
kind: Deployment
jsonPointers:
- /spec/replicas
```
### Pattern 2: ApplicationSet with Cluster Generator for Fleet Deployments
Provisions the same application across dev, staging, and production clusters using a single ApplicationSet manifest with the Cluster generator.
```yaml
# ApplicationSet generating per-cluster Applications
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: myapp-fleet
namespace: argocd
spec:
generators:
- cluster:
selector:
matchLabels:
environment: production
template:
metadata:
name: '{{name}}-myapp'
namespace: argocd
spec:
project: production
source:
repoURL: https://github.com/org/infrastructure.git
targetRevision: main
path: k8s/overlays/production
destination:
server: '{{server}}'
namespace: myapp-prod
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
- PrunePropagationPolicy=foreground
```
### Pattern 3: App-of-Apps Bootstrap Pattern
A parent Application that references a directory of child Application manifests to bootstrap an entire application topology from a single file.
```yaml
# Root Application for app-of-apps bootstrap
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: bootstrap-root
namespace: argocd
spec:
project: platform
source:
repoURL: https://github.com/org/platform-config.git
targetRevision: main
path: applications/production
destination:
server: https://kubernetes.default.svc
namespace: argocd
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
ignoreDifferences:
- group: argoproj.io
kind: Application
jsonPointers:
- /status
```
Child Applications live in `applications/production/` directory:
```yaml
# applications/production/redis.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: redis-cache
namespace: argocd
spec:
project: production
source:
repoURL: https://github.com/org/infrastructure.git
targetRevision: main
path: k8s/redis
destination:
server: https://kubernetes.default.svc
namespace: redis
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
```
### Pattern 4: Sync Windows for Deployment Timeboxes
Restricts when Argo CD can automatically sync applications, useful for compliance with change windows or cost controls.
```yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: myapp-production
namespace: argocd
spec:
project: production
source:
repoURL: https://github.com/org/infrastructure.git
targetRevision: main
path: k8s/overlays/production
destination:
server: https://kubernetes.default.svc
namespace: myapp-prod
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
- PrunePropagationPolicy=foreground
syncWindows:
- kind: allow
schedule: '0 9 * * 1-5'
duration: 8h
applications:
- myapp-production
manualSync: true
- kind: deny
schedule: '0 0 * * 0'
duration: 24h
matchExpressions:
- key: environment
operator: In
values:
- production
```
### Pattern 5: Custom Health Check for Application-Specific Readiness
Define a custom health assessment script for resources that Argo CD cannot assess with its default checks (e.g., StatefulSet with partitioned rollouts, or a custom CRD).
```bash
#!/usr/bin/env bash
# Custom health check for a StatefulSet with partitioned rollouts
# Usage: argocd-health-check.sh <resource-type> <namespace> <name>
set -euo pipefail
RESOURCE_TYPE="${1:-StatefulSet}"
NAMESPACE="${2:-}"
NAME="${3:-}"
if [[ -z "$NAMESPACE" || -z "$NAME" ]]; then
echo '{"status":"unknown","message":"Usage: argocd-health-check.sh <type> <namespace> <name>"}'
exit 0
fi
case "$RESOURCE_TYPE" in
StatefulSet)
CURRENT=$(kubectl get statefulset "$NAME" -n "$NAMESPACE" -o jsonpath='{.status.currentReplicas}' 2>/dev/null || echo "")
DESIRED=$(kubectl get statefulset "$NAME" -n "$NAMESPACE" -o jsonpath='{.spec.replicas}' 2>/dev/null || echo "")
UPDATED=$(kubectl get statefulset "$NAME" -n "$NAMESPACE" -o jsonpath='{.status.updatedReplicas}' 2>/dev/null || echo "")
if [[ "$CURRENT" == "$DESIRED" && "$UPDATED" == "$DESIRED" && "$CURRENT" != "" ]]; then
echo '{"status":"Healthy","message":"StatefulSet fully rolled out: '"$CURRENT"' replicas ready"}'
else
echo '{"status":"Progressing","message":"StatefulSet rolling: current='"$CURRENT"' desired='"$DESIRED"' updated='"$UPDATED"'"}'
fi
;;
*)
echo '{"status":"Unknown","message":"No custom health check defined for '"$RESOURCE_TYPE"'"}'
;;
esac
```
### Pattern 6: Application with Argo Rollouts Integration
Shows how Argo CD Application works alongside Argo Rollout for progressive delivery — Argo CD syncs the Rollout manifest, and the Rollout controller handles canary steps.
```yaml
# Argo CD Application managing an Argo Rollout
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: myapp-canary
namespace: argocd
spec:
project: production
source:
repoURL: https://github.com/org/infrastructure.git
targetRevision: main
path: k8s/overlays/production
destination:
server: https://kubernetes.default.svc
namespace: myapp-prod
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
- PrunePropagationPolicy=foreground
ignoreDifferences:
- group: argoproj.io
kind: Rollout
jsonPointers:
- /status
```
---
## Constraints
### MUST DO
- Always enable `prune: true` in syncPolicy.automated to prevent configuration drift from orphaned resources
- Use `selfHeal: true` to let Argo CD automatically correct manual changes outside Git
- Set `targetRevision` to a specific branch or tag — never use HEAD for production Applications
- Define `syncWindows` for production clusters to enforce deployment timeboxes and CAB policies
- Use `finalizers: resources-finalizer.argocd.argoproj.io` to ensure cleanup on Application deletion
- Pin `targetRevision` for production deployments and use tags or SHAs, not mutable branch references
- Configure `retry.limit` and `retry.backoff` to handle transient Git or API server failures
- Use ApplicationSets for any multi-environment deployment to avoid manifest duplication
- Set `ignoreDifferences` only for controlled drift (like replicas managed by HPA), never for configuration-critical fields
- Enable audit logging via `argocd-rbac-cfg` ConfigMap for compliance tracking
### MUST NOT DO
- Disable `prune: true` on production Applications — orphaned resources accumulate and cause drift
- Set `automated.sync` without `prune` and `selfHeal` — this breaks the GitOps feedback loop
- Use `syncOptions: [PruneLast=false]` — it creates transient resource deletion that breaks traffic flow
- Manually edit resources managed by Argo CD outside of Git — it triggers sync conflicts
- Reference multiple `targetRevision` branches for the same Application — Argo CD cannot reconcile divergent states
- Skip `CreateNamespace=true` in syncOptions for new namespaces — the Application will fail with a NotFound error
- Use `syncPolicy.manual` with `automated: true` — these are mutually exclusive and cause reconciliation confusion
- Omit `ignoreDifferences` for HPA-managed replicas — the constant replica count drift causes continuous sync cycles
---
## Related Skills
| Skill | Purpose |
|---|---|
| `cncf-helm-chart-development` | Helm chart creation for application manifests consumed by Argo CD Application sources |
| `cncf-kyverno` | Policy enforcement on resources before and after Argo CD sync operations |
| `cncf-gitlab-ci-cd-pipelines` | CI pipeline that builds artifacts and pushes manifest changes to Git for Argo CD to pick up |
| `cncf-kubernetes-deployments-management` | Kubernetes Deployment management concepts that Argo CD operates on |
| `cncf-argo` | Broader Argo ecosystem (Workflows, Events, Rollouts) when beyond pure GitOps |
---
## Live References
> Authoritative documentation links for Argo CD GitOps workflows.
- [Argo CD Documentation](https://argo-cd.readthedocs.io/en/stable/)
- [Argo CD Application CRD Reference](https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/)
- [Argo CD ApplicationSet Generators](https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Generators-Cluster/)
- [Argo CD Sync Policy Documentation](https://argo-cd.readthedocs.io/en/stable/operator-manual/sync-waves/)
- [Argo CD Custom Health Checks](https://argo-cd.readthedocs.io/en/stable/operator-manual/health/)
- [Argo CD Sync Windows](https://argo-cd.readthedocs.io/en/stable/operator-manual/sync-windows/)
- [Argo CD App-of-Apps Pattern](https://argo-cd.readthedocs.io/en/stable/operator-manual/cluster-bootstrapping/)
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!