Skip to main content

gitops

Operational framework using Git as single source of truth for declarative infrastructure and applications

Source facts

Repository
ffsshhttiikk/opencode-agents-skills
Last source activity
February 28, 2026 at 22:49
Detected SKILL.md language
English
Stars
3
Forks
2

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
gitops
description
Operational framework using Git as single source of truth for declarative infrastructure and applications
category
devops
# GitOps ## What I Do I provide a framework for declarative infrastructure and application management using Git as the single source of truth. All changes are version-controlled, enabling review processes, rollbacks, and audit trails for infrastructure and deployments. ## When to Use Me - Managing Kubernetes clusters declaratively - Implementing infrastructure version control - Enabling git-based deployment approvals - Maintaining audit trails for changes - Standardizing deployment procedures - Implementing progressive delivery - Multi-environment configuration management ## Core Concepts - **Declarative Desired State**: Define infrastructure in code - **Git as Source of Truth**: Single authoritative configuration - **Continuous Reconciliation**: Operators enforce desired state - **Pull-based Deployments**: Cluster pulls updates from Git - **Immutable Artifacts**: Container images, Helm charts - **Diff and Sync**: Comparing current vs. desired state - **Prerequisites**: What's needed before applying changes - **Drift Detection**: Identifying unauthorized changes - **Health Checks**: Verifying system health after changes - **Audit Trail**: Complete history of changes in Git ## Code Examples **ArgoCD Application (YAML):** ```yaml apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: production-app namespace: argocd finalizers: - resources-finalizer.argocd.argoproj.io spec: project: production source: repoURL: https://github.com/org/config-repo.git targetRevision: main path: applications/my-app/overlays/production kustomize: images: - myapp=registry.io/myapp:v2.3.1 destination: server: https://kubernetes.default.svc namespace: production syncPolicy: automated: prune: true selfHeal: true allowEmpty: false syncOptions: - CreateNamespace=true - PrunePropagationPolicy=foreground - PruneLast=true retry: limit: 5 backoff: duration: 5s factor: 2 maxDuration: 3m ignoreDifferences: - group: apps kind: Deployment jsonPointers: - /spec/replicas revisionHistoryLimit: 10 ``` **FluxCD Kustomization (YAML):** ```yaml apiVersion: kustomize.toolkit.fluxcd.io/v1beta2 kind: Kustomization metadata: name: apps-production namespace: flux-system spec: interval: 10m0s path: ./clusters/production/apps prune: true wait: true timeout: 5m0s retryInterval: 2m0s sourceRef: kind: GitRepository name: flux-system decryption: provider: sops secretRef: name: sops-gpg postBuild: substitute: REPLICA_COUNT: "3" MEMORY_LIMIT: "2Gi" substituteFrom: - kind: ConfigMap name: cluster-config - kind: Secret name: image-credentials healthChecks: - apiVersion: apps/v1 kind: Deployment name: frontend namespace: apps - apiVersion: apps/v1 kind: Deployment name: backend namespace: apps - apiVersion: apps/v1 kind: Deployment name: worker namespace: apps ``` **GitOps Workflow with Kustomize:** ```yaml # clusters/base/kustomization.yaml apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - ../../base/deployment.yaml - ../../base/service.yaml - ../../base/hpa.yaml namespace: default commonLabels: app.kubernetes.io/part-of: myapp images: - name: myapp newName: registry.io/myapp newTag: v1.0.0 configMapGenerator: - files: - config.yaml name: app-config secretGenerator: - literals: - DATABASE_PASSWORD=changeme name: app-secrets type: Opaque --- # clusters/production/kustomization.yaml apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization bases: - ../../base patches: - path: replicas-patch.yaml - path: resource-limits-patch.yaml images: - name: myapp newTag: v2.3.1 configMapGenerator: - behavior: merge files: - PRODUCTION=true - LOG_LEVEL=info config.yaml=./production-config.yaml replicas: - name: frontend count: 5 - name: backend count: 10 - name: worker count: 3 ``` **Pull Request for GitOps Change:** ```markdown ## Summary Increases API service replicas from 5 to 10 to handle projected traffic growth. ## Changes - `clusters/production/kustomization.yaml`: Update replica count - `clusters/production/replicas-patch.yaml`: Add API service scaling ## Verification - [x] Tested locally with `kustomize build` - [x] Diff reviewed in PR - [x] Automated tests pass - [x] Security scan completed ## Rollback Plan - Revert this PR to roll back - Estimated rollback time: 2 minutes ## Approval Required: 2 approvers from Platform team Labels: gitops/approved, deployment/pending ``` **GitOps Change Pipeline:** ```yaml # .github/workflows/gitops-sync.yaml name: GitOps Sync on: pull_request: paths: - 'clusters/**' - 'applications/**' push: branches: - main paths: - 'clusters/**' - 'applications/**' jobs: validate: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Setup Kustomize uses: imranismail/setup-kustomize@v1 - name: Validate Kustomize run: | for cluster in clusters/*/; do echo "Validating $cluster" kustomize build "$cluster" > /dev/null done - name: Check Drift uses: stefanprodan/gitops-toolkit@v1 with: action: drift-detect path: clusters/production policy: strict - name: Comment PR if: github.event_name == 'pull_request' uses: actions/github-script@v7 with: script: | github.rest.issues.createComment({ issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, body: '✅ GitOps validation passed. Ready for merge.' }) sync: needs: validate if: github.ref == 'refs/heads/main' && github.event_name == 'push' runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Configure AWS Credentials uses: aws-actions/configure-aws-credentials@v4 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: us-east-1 - name: Update Flux Source uses: fluxcd/flux2@v2 with: command: | flux create source git flux-system \ --url=https://github.com/${{ github.repository }} \ --branch=main \ --interval=1m \ --export flux reconcile source git flux-system ``` ## Best Practices 1. **Use branch strategies** - Environment-specific branches (main, staging) 2. **Implement code review** - All changes through PRs 3. **Enforce required reviewers** - Platform team approval 4. **Use immutable tags** - Never use mutable image tags 5. **Enable auto-sync** - Continuous reconciliation 6. **Implement drift detection** - Alert on unauthorized changes 7. **Use secrets management** - External secrets, Vault, SOPS 8. **Set resource quotas** - Prevent resource exhaustion 9. **Monitor sync status** - Track reconciliation health 10. **Test changes locally** - Validate before pushing
View on GitHub