ChatGPT Claude Codex CLI Cohere Cursor DeepSeek Gemini GitHub Copilot GLM Grok Kimi Llama MiniMax Mistral OpenAI opencode Skill

gitops-workflow

Complete guide to implementing GitOps workflows with ArgoCD and Flux for automated Kubernetes deployments.

LLM Mart · 0 points · 19 views 1 listing impressions 0 install-command copies
Virus-scanned Reviewed automatically before listing.

Full trust report

Download sickn33-agentic-awesome-skills-skills_gitops-workflow-286166a.zip · 5 KB
Part of sickn33/agentic-awesome-skills — 427 skills
This skill couldn't be refreshed from GitHub on the last check — you're seeing the last imported snapshot.

Install

skills CLI npx skills add https://github.com/sickn33/agentic-awesome-skills/tree/main/skills/gitops-workflow
Claude Code claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install sickn33-agentic-awesome-skills@llmmart
Git git clone https://github.com/sickn33/agentic-awesome-skills.git

The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole sickn33/agentic-awesome-skills collection as a plugin from our marketplace. Git is the plain clone.

Skill manifest

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.

Use this skill when

  • 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

Do not use this skill when

  • You need a one-off manual deployment
  • You cannot manage cluster access or repo permissions
  • You are not deploying to Kubernetes

Instructions

  1. Define repo layout and desired-state conventions.
  2. Install ArgoCD or Flux and connect clusters.
  3. Configure sync policies, environments, and promotion flow.
  4. Validate rollbacks and secret handling.

Safety

  • Avoid auto-sync to production without approvals.
  • Keep secrets out of Git and use sealed or external secret managers.

OpenGitOps Principles

  1. Declarative - Entire system described declaratively
  2. Versioned and Immutable - Desired state stored in Git
  3. Pulled Automatically - Software agents pull desired state
  4. Continuously Reconciled - Agents reconcile actual vs desired state

ArgoCD Setup

1. Installation

# Create namespace
kubectl create namespace argocd

# Install ArgoCD
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

# Get admin password
kubectl -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

# argocd/applications/my-app.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app
  namespace: argocd
spec:
  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

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: applications
  namespace: argocd
spec:
  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

# Install Flux CLI
brew install fluxcd/tap/flux

# Alternative: download the official installer, inspect it, then execute it
tmpdir="$(mktemp -d)"
trap 'rm -rf "$tmpdir"' EXIT
curl -fsSLo "$tmpdir/flux-install.sh" https://fluxcd.io/install.sh
cat "$tmpdir/flux-install.sh"  # review the full installer before sudo
sudo bash "$tmpdir/flux-install.sh"

# Bootstrap Flux
flux bootstrap github \
  --owner=org \
  --repository=gitops-repo \
  --branch=main \
  --path=clusters/production \
  --personal

2. Create GitRepository

apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
  name: my-app
  namespace: flux-system
spec:
  interval: 1m
  url: https://github.com/org/my-app
  ref:
    branch: main

3. Create Kustomization

apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
  name: my-app
  namespace: flux-system
spec:
  interval: 5m
  path: ./deploy
  prune: true
  sourceRef:
    kind: GitRepository
    name: my-app

Sync Policies

Auto-Sync Configuration

ArgoCD:

syncPolicy:
  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:

spec:
  interval: 1m
  prune: true
  wait: true
  timeout: 5m

Reference: See references/sync-policies.md

Progressive Delivery

Canary Deployment with ArgoCD Rollouts

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: my-app
spec:
  replicas: 5
  strategy:
    canary:
      steps:
      - setWeight: 20
      - pause: {duration: 1m}
      - setWeight: 50
      - pause: {duration: 2m}
      - setWeight: 100

Blue-Green Deployment

strategy:
  blueGreen:
    activeService: my-app
    previewService: my-app-preview
    autoPromotionEnabled: false

Secret Management

External Secrets Operator

apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
  name: db-credentials
spec:
  refreshInterval: 1h
  secretStoreRef:
    name: aws-secrets-manager
    kind: SecretStore
  target:
    name: db-credentials
  data:
  - secretKey: password
    remoteRef:
      key: prod/db/password

Sealed Secrets

# Encrypt secret
kubeseal --format yaml < secret.yaml > sealed-secret.yaml

# Commit sealed-secret.yaml to Git

Best Practices

  1. Use separate repos or branches for different environments
  2. Implement RBAC for Git repositories
  3. Enable notifications for sync failures
  4. Use health checks for custom resources
  5. Implement approval gates for production
  6. Keep secrets out of Git (use External Secrets)
  7. Use App of Apps pattern for organization
  8. Tag releases for easy rollback
  9. Monitor sync status with alerts
  10. Test changes in staging first

Troubleshooting

Sync failures:

argocd app get my-app
argocd app sync my-app --prune

Out of sync status:

argocd app diff my-app
argocd app sync my-app --force

Related Skills

  • k8s-manifest-generator - For creating manifests
  • helm-chart-scaffolding - For packaging applications

Limitations

  • Use this skill only when the task clearly matches the scope described above.
  • Do not treat the output as a substitute for environment-specific validation, testing, or expert review.
  • Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.
Files (agentic-awesome-skills)
  • references
    • argocd-setup.md 2.8 KB
      # ArgoCD Setup and Configuration
      
      ## Installation Methods
      
      ### 1. Standard Installation
      ```bash
      kubectl create namespace argocd
      kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
      ```
      
      ### 2. High Availability Installation
      ```bash
      kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/ha/install.yaml
      ```
      
      ### 3. Helm Installation
      ```bash
      helm repo add argo https://argoproj.github.io/argo-helm
      helm install argocd argo/argo-cd -n argocd --create-namespace
      ```
      
      ## Initial Configuration
      
      ### Access ArgoCD UI
      ```bash
      # Port forward
      kubectl port-forward svc/argocd-server -n argocd 8080:443
      
      # Get initial admin password
      argocd admin initial-password -n argocd
      ```
      
      ### Configure Ingress
      ```yaml
      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        name: argocd-server-ingress
        namespace: argocd
        annotations:
          cert-manager.io/cluster-issuer: letsencrypt-prod
          nginx.ingress.kubernetes.io/ssl-passthrough: "true"
          nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
      spec:
        ingressClassName: nginx
        rules:
        - host: argocd.example.com
          http:
            paths:
            - path: /
              pathType: Prefix
              backend:
                service:
                  name: argocd-server
                  port:
                    number: 443
        tls:
        - hosts:
          - argocd.example.com
          secretName: argocd-secret
      ```
      
      ## CLI Configuration
      
      ### Login
      ```bash
      argocd login argocd.example.com --username admin
      ```
      
      ### Add Repository
      ```bash
      argocd repo add https://github.com/org/repo --username user --password token
      ```
      
      ### Create Application
      ```bash
      argocd app create my-app \
        --repo https://github.com/org/repo \
        --path apps/my-app \
        --dest-server https://kubernetes.default.svc \
        --dest-namespace production
      ```
      
      ## SSO Configuration
      
      ### GitHub OAuth
      ```yaml
      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: argocd-cm
        namespace: argocd
      data:
        url: https://argocd.example.com
        dex.config: |
          connectors:
            - type: github
              id: github
              name: GitHub
              config:
                clientID: $GITHUB_CLIENT_ID
                clientSecret: $GITHUB_CLIENT_SECRET
                orgs:
                - name: my-org
      ```
      
      ## RBAC Configuration
      ```yaml
      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: argocd-rbac-cm
        namespace: argocd
      data:
        policy.default: role:readonly
        policy.csv: |
          p, role:developers, applications, *, */dev, allow
          p, role:operators, applications, *, */*, allow
          g, my-org:devs, role:developers
          g, my-org:ops, role:operators
      ```
      
      ## Best Practices
      
      1. Enable SSO for production
      2. Implement RBAC policies
      3. Use separate projects for teams
      4. Enable audit logging
      5. Configure notifications
      6. Use ApplicationSets for multi-cluster
      7. Implement resource hooks
      8. Configure health checks
      9. Use sync windows for maintenance
      10. Monitor with Prometheus metrics
      
    • sync-policies.md 2.7 KB
      # GitOps Sync Policies
      
      ## ArgoCD Sync Policies
      
      ### Automated Sync
      ```yaml
      syncPolicy:
        automated:
          prune: true       # Delete resources removed from Git
          selfHeal: true    # Reconcile manual changes
          allowEmpty: false # Prevent empty sync
      ```
      
      ### Manual Sync
      ```yaml
      syncPolicy:
        syncOptions:
        - PrunePropagationPolicy=foreground
        - CreateNamespace=true
      ```
      
      ### Sync Windows
      ```yaml
      syncWindows:
      - kind: allow
        schedule: "0 8 * * *"
        duration: 1h
        applications:
        - my-app
      - kind: deny
        schedule: "0 22 * * *"
        duration: 8h
        applications:
        - '*'
      ```
      
      ### Retry Policy
      ```yaml
      syncPolicy:
        retry:
          limit: 5
          backoff:
            duration: 5s
            factor: 2
            maxDuration: 3m
      ```
      
      ## Flux Sync Policies
      
      ### Kustomization Sync
      ```yaml
      apiVersion: kustomize.toolkit.fluxcd.io/v1
      kind: Kustomization
      metadata:
        name: my-app
      spec:
        interval: 5m
        prune: true
        wait: true
        timeout: 5m
        retryInterval: 1m
        force: false
      ```
      
      ### Source Sync Interval
      ```yaml
      apiVersion: source.toolkit.fluxcd.io/v1
      kind: GitRepository
      metadata:
        name: my-app
      spec:
        interval: 1m
        timeout: 60s
      ```
      
      ## Health Assessment
      
      ### Custom Health Checks
      ```yaml
      # ArgoCD
      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: argocd-cm
        namespace: argocd
      data:
        resource.customizations.health.MyCustomResource: |
          hs = {}
          if obj.status ~= nil then
            if obj.status.conditions ~= nil then
              for i, condition in ipairs(obj.status.conditions) do
                if condition.type == "Ready" and condition.status == "False" then
                  hs.status = "Degraded"
                  hs.message = condition.message
                  return hs
                end
                if condition.type == "Ready" and condition.status == "True" then
                  hs.status = "Healthy"
                  hs.message = condition.message
                  return hs
                end
              end
            end
          end
          hs.status = "Progressing"
          hs.message = "Waiting for status"
          return hs
      ```
      
      ## Sync Options
      
      ### Common Sync Options
      - `PrunePropagationPolicy=foreground` - Wait for pruned resources to be deleted
      - `CreateNamespace=true` - Auto-create namespace
      - `Validate=false` - Skip kubectl validation
      - `PruneLast=true` - Prune resources after sync
      - `RespectIgnoreDifferences=true` - Honor ignore differences
      - `ApplyOutOfSyncOnly=true` - Only apply out-of-sync resources
      
      ## Best Practices
      
      1. Use automated sync for non-production
      2. Require manual approval for production
      3. Configure sync windows for maintenance
      4. Implement health checks for custom resources
      5. Use selective sync for large applications
      6. Configure appropriate retry policies
      7. Monitor sync failures with alerts
      8. Use prune with caution in production
      9. Test sync policies in staging
      10. Document sync behavior for teams
      
  • SKILL.md 6.8 KB
    ---
    name: gitops-workflow
    description: "Complete guide to implementing GitOps workflows with ArgoCD and Flux for automated Kubernetes deployments."
    risk: critical
    source: community
    date_added: "2026-02-27"
    ---
    
    # 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.
    
    ## Use this skill when
    
    - 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
    
    ## Do not use this skill when
    
    - You need a one-off manual deployment
    - You cannot manage cluster access or repo permissions
    - You are not deploying to Kubernetes
    
    ## Instructions
    
    1. Define repo layout and desired-state conventions.
    2. Install ArgoCD or Flux and connect clusters.
    3. Configure sync policies, environments, and promotion flow.
    4. Validate rollbacks and secret handling.
    
    ## Safety
    
    - Avoid auto-sync to production without approvals.
    - Keep secrets out of Git and use sealed or external secret managers.
    
    ## OpenGitOps Principles
    
    1. **Declarative** - Entire system described declaratively
    2. **Versioned and Immutable** - Desired state stored in Git
    3. **Pulled Automatically** - Software agents pull desired state
    4. **Continuously Reconciled** - Agents reconcile actual vs desired state
    
    ## ArgoCD Setup
    
    ### 1. Installation
    
    ```bash
    # Create namespace
    kubectl create namespace argocd
    
    # Install ArgoCD
    kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
    
    # Get admin password
    kubectl -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.yaml
    apiVersion: argoproj.io/v1alpha1
    kind: Application
    metadata:
      name: my-app
      namespace: argocd
    spec:
      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
    
    ```yaml
    apiVersion: argoproj.io/v1alpha1
    kind: Application
    metadata:
      name: applications
      namespace: argocd
    spec:
      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 CLI
    brew install fluxcd/tap/flux
    
    # Alternative: download the official installer, inspect it, then execute it
    tmpdir="$(mktemp -d)"
    trap 'rm -rf "$tmpdir"' EXIT
    curl -fsSLo "$tmpdir/flux-install.sh" https://fluxcd.io/install.sh
    cat "$tmpdir/flux-install.sh"  # review the full installer before sudo
    sudo bash "$tmpdir/flux-install.sh"
    
    # Bootstrap Flux
    flux bootstrap github \
      --owner=org \
      --repository=gitops-repo \
      --branch=main \
      --path=clusters/production \
      --personal
    ```
    
    ### 2. Create GitRepository
    
    ```yaml
    apiVersion: source.toolkit.fluxcd.io/v1
    kind: GitRepository
    metadata:
      name: my-app
      namespace: flux-system
    spec:
      interval: 1m
      url: https://github.com/org/my-app
      ref:
        branch: main
    ```
    
    ### 3. Create Kustomization
    
    ```yaml
    apiVersion: kustomize.toolkit.fluxcd.io/v1
    kind: Kustomization
    metadata:
      name: my-app
      namespace: flux-system
    spec:
      interval: 5m
      path: ./deploy
      prune: true
      sourceRef:
        kind: GitRepository
        name: my-app
    ```
    
    ## Sync Policies
    
    ### Auto-Sync Configuration
    
    **ArgoCD:**
    ```yaml
    syncPolicy:
      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:**
    ```yaml
    spec:
      interval: 1m
      prune: true
      wait: true
      timeout: 5m
    ```
    
    **Reference:** See `references/sync-policies.md`
    
    ## Progressive Delivery
    
    ### Canary Deployment with ArgoCD Rollouts
    
    ```yaml
    apiVersion: argoproj.io/v1alpha1
    kind: Rollout
    metadata:
      name: my-app
    spec:
      replicas: 5
      strategy:
        canary:
          steps:
          - setWeight: 20
          - pause: {duration: 1m}
          - setWeight: 50
          - pause: {duration: 2m}
          - setWeight: 100
    ```
    
    ### Blue-Green Deployment
    
    ```yaml
    strategy:
      blueGreen:
        activeService: my-app
        previewService: my-app-preview
        autoPromotionEnabled: false
    ```
    
    ## Secret Management
    
    ### External Secrets Operator
    
    ```yaml
    apiVersion: external-secrets.io/v1beta1
    kind: ExternalSecret
    metadata:
      name: db-credentials
    spec:
      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 secret
    kubeseal --format yaml < secret.yaml > sealed-secret.yaml
    
    # Commit sealed-secret.yaml to Git
    ```
    
    ## Best Practices
    
    1. **Use separate repos or branches** for different environments
    2. **Implement RBAC** for Git repositories
    3. **Enable notifications** for sync failures
    4. **Use health checks** for custom resources
    5. **Implement approval gates** for production
    6. **Keep secrets out of Git** (use External Secrets)
    7. **Use App of Apps pattern** for organization
    8. **Tag releases** for easy rollback
    9. **Monitor sync status** with alerts
    10. **Test changes** in staging first
    
    ## Troubleshooting
    
    **Sync failures:**
    ```bash
    argocd app get my-app
    argocd app sync my-app --prune
    ```
    
    **Out of sync status:**
    ```bash
    argocd app diff my-app
    argocd app sync my-app --force
    ```
    
    ## Related Skills
    
    - `k8s-manifest-generator` - For creating manifests
    - `helm-chart-scaffolding` - For packaging applications
    
    ## Limitations
    - Use this skill only when the task clearly matches the scope described above.
    - Do not treat the output as a substitute for environment-specific validation, testing, or expert review.
    - Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.
    

Comments (0)

Sign in to join the conversation.

No comments yet.

Reviews (0)

No reviews yet.

Related