Claude Agent Skill · by Wshobson

Gitops Workflow

Implements GitOps workflows using ArgoCD and Flux to automate Kubernetes deployments from Git repositories. Sets up declarative sync policies, generates applica

Install
Terminal · npx
$npx skills add https://github.com/wshobson/agents --skill gitops-workflow
Works with Paperclip

How Gitops Workflow fits into a Paperclip company.

Gitops Workflow drops into any Paperclip agent that handles this kind of work. Assign it to a specialist inside a pre-configured PaperclipOrg company and the skill becomes available on every heartbeat — no prompt engineering, no tool wiring.

S
SaaS FactoryPaired

Pre-configured AI company — 18 agents, 18 skills, one-time purchase.

$27$59
Explore pack
Source file
SKILL.md289 lines
Expand
---name: gitops-workflowdescription: Implement GitOps workflows with ArgoCD and Flux for automated, declarative Kubernetes deployments with continuous reconciliation. Use when implementing GitOps practices, automating Kubernetes deployments, or setting up declarative infrastructure management.--- # GitOps Workflow Complete guide to implementing GitOps workflows with ArgoCD and Flux for automated Kubernetes deployments. ## Purpose Implement declarative, Git-based continuous delivery for Kubernetes using ArgoCD or Flux CD, following OpenGitOps principles. ## When to Use This Skill - Set up GitOps for Kubernetes clusters- Automate application deployments from Git- Implement progressive delivery strategies- Manage multi-cluster deployments- Configure automated sync policies- Set up secret management in GitOps ## OpenGitOps Principles 1. **Declarative** - Entire system described declaratively2. **Versioned and Immutable** - Desired state stored in Git3. **Pulled Automatically** - Software agents pull desired state4. **Continuously Reconciled** - Agents reconcile actual vs desired state ## ArgoCD Setup ### 1. Installation ```bash# Create namespacekubectl create namespace argocd # Install ArgoCDkubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml # Get admin passwordkubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d``` **Reference:** See `references/argocd-setup.md` for detailed setup ### 2. Repository Structure ```gitops-repo/├── apps/│   ├── production/│   │   ├── app1/│   │   │   ├── kustomization.yaml│   │   │   └── deployment.yaml│   │   └── app2/│   └── staging/├── infrastructure/│   ├── ingress-nginx/│   ├── cert-manager/│   └── monitoring/└── argocd/    ├── applications/    └── projects/``` ### 3. Create Application ```yaml# argocd/applications/my-app.yamlapiVersion: argoproj.io/v1alpha1kind: Applicationmetadata:  name: my-app  namespace: argocdspec:  project: default  source:    repoURL: https://github.com/org/gitops-repo    targetRevision: main    path: apps/production/my-app  destination:    server: https://kubernetes.default.svc    namespace: production  syncPolicy:    automated:      prune: true      selfHeal: true    syncOptions:      - CreateNamespace=true``` ### 4. App of Apps Pattern ```yamlapiVersion: argoproj.io/v1alpha1kind: Applicationmetadata:  name: applications  namespace: argocdspec:  project: default  source:    repoURL: https://github.com/org/gitops-repo    targetRevision: main    path: argocd/applications  destination:    server: https://kubernetes.default.svc    namespace: argocd  syncPolicy:    automated: {}``` ## Flux CD Setup ### 1. Installation ```bash# Install Flux CLIcurl -s https://fluxcd.io/install.sh | sudo bash # Bootstrap Fluxflux bootstrap github \  --owner=org \  --repository=gitops-repo \  --branch=main \  --path=clusters/production \  --personal``` ### 2. Create GitRepository ```yamlapiVersion: source.toolkit.fluxcd.io/v1kind: GitRepositorymetadata:  name: my-app  namespace: flux-systemspec:  interval: 1m  url: https://github.com/org/my-app  ref:    branch: main``` ### 3. Create Kustomization ```yamlapiVersion: kustomize.toolkit.fluxcd.io/v1kind: Kustomizationmetadata:  name: my-app  namespace: flux-systemspec:  interval: 5m  path: ./deploy  prune: true  sourceRef:    kind: GitRepository    name: my-app``` ## Sync Policies ### Auto-Sync Configuration **ArgoCD:** ```yamlsyncPolicy:  automated:    prune: true # Delete resources not in Git    selfHeal: true # Reconcile manual changes    allowEmpty: false  retry:    limit: 5    backoff:      duration: 5s      factor: 2      maxDuration: 3m``` **Flux:** ```yamlspec:  interval: 1m  prune: true  wait: true  timeout: 5m``` **Reference:** See `references/sync-policies.md` ## Progressive Delivery ### Canary Deployment with ArgoCD Rollouts ```yamlapiVersion: argoproj.io/v1alpha1kind: Rolloutmetadata:  name: my-appspec:  replicas: 5  strategy:    canary:      steps:        - setWeight: 20        - pause: { duration: 1m }        - setWeight: 50        - pause: { duration: 2m }        - setWeight: 100``` ### Blue-Green Deployment ```yamlstrategy:  blueGreen:    activeService: my-app    previewService: my-app-preview    autoPromotionEnabled: false``` ## Secret Management ### External Secrets Operator ```yamlapiVersion: external-secrets.io/v1beta1kind: ExternalSecretmetadata:  name: db-credentialsspec:  refreshInterval: 1h  secretStoreRef:    name: aws-secrets-manager    kind: SecretStore  target:    name: db-credentials  data:    - secretKey: password      remoteRef:        key: prod/db/password``` ### Sealed Secrets ```bash# Encrypt secretkubeseal --format yaml < secret.yaml > sealed-secret.yaml # Commit sealed-secret.yaml to Git``` ## Best Practices 1. **Use separate repos or branches** for different environments2. **Implement RBAC** for Git repositories3. **Enable notifications** for sync failures4. **Use health checks** for custom resources5. **Implement approval gates** for production6. **Keep secrets out of Git** (use External Secrets)7. **Use App of Apps pattern** for organization8. **Tag releases** for easy rollback9. **Monitor sync status** with alerts10. **Test changes** in staging first ## Troubleshooting **Sync failures:** ```bashargocd app get my-appargocd app sync my-app --prune``` **Out of sync status:** ```bashargocd app diff my-appargocd app sync my-app --force``` ## Related Skills - `k8s-manifest-generator` - For creating manifests- `helm-chart-scaffolding` - For packaging applications