Skip to main content

argo-cd-gitops-workflows

Implements GitOps deployment workflows using Argo CD — sync policies, ApplicationSets, app-of-apps bootstrapping, and resource pruning for automated Kubernetes deployment pipelines.

소스 정보

저장소
paulpas/agent-skill-router
최근 소스 활동
2026년 8월 7일 18:58
감지된 SKILL.md 언어
영어
스타
7
포크
0

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
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/)
GitHub에서 보기