specweave 0.3.13 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +506 -17
- package/README.md +100 -58
- package/bin/install-all.sh +9 -2
- package/bin/install-hooks.sh +57 -0
- package/bin/specweave.js +16 -0
- package/dist/adapters/adapter-base.d.ts +21 -0
- package/dist/adapters/adapter-base.d.ts.map +1 -1
- package/dist/adapters/adapter-base.js +28 -0
- package/dist/adapters/adapter-base.js.map +1 -1
- package/dist/adapters/adapter-interface.d.ts +41 -0
- package/dist/adapters/adapter-interface.d.ts.map +1 -1
- package/dist/adapters/claude/adapter.d.ts +36 -0
- package/dist/adapters/claude/adapter.d.ts.map +1 -1
- package/dist/adapters/claude/adapter.js +135 -0
- package/dist/adapters/claude/adapter.js.map +1 -1
- package/dist/adapters/copilot/adapter.d.ts +25 -0
- package/dist/adapters/copilot/adapter.d.ts.map +1 -1
- package/dist/adapters/copilot/adapter.js +112 -0
- package/dist/adapters/copilot/adapter.js.map +1 -1
- package/dist/adapters/cursor/adapter.d.ts +36 -0
- package/dist/adapters/cursor/adapter.d.ts.map +1 -1
- package/dist/adapters/cursor/adapter.js +140 -0
- package/dist/adapters/cursor/adapter.js.map +1 -1
- package/dist/adapters/generic/adapter.d.ts +25 -0
- package/dist/adapters/generic/adapter.d.ts.map +1 -1
- package/dist/adapters/generic/adapter.js +111 -0
- package/dist/adapters/generic/adapter.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +103 -1
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/plugin.d.ts +37 -0
- package/dist/cli/commands/plugin.d.ts.map +1 -0
- package/dist/cli/commands/plugin.js +296 -0
- package/dist/cli/commands/plugin.js.map +1 -0
- package/dist/core/agent-model-manager.d.ts +52 -0
- package/dist/core/agent-model-manager.d.ts.map +1 -0
- package/dist/core/agent-model-manager.js +120 -0
- package/dist/core/agent-model-manager.js.map +1 -0
- package/dist/core/cost-tracker.d.ts +108 -0
- package/dist/core/cost-tracker.d.ts.map +1 -0
- package/dist/core/cost-tracker.js +281 -0
- package/dist/core/cost-tracker.js.map +1 -0
- package/dist/core/model-selector.d.ts +57 -0
- package/dist/core/model-selector.d.ts.map +1 -0
- package/dist/core/model-selector.js +115 -0
- package/dist/core/model-selector.js.map +1 -0
- package/dist/core/phase-detector.d.ts +62 -0
- package/dist/core/phase-detector.d.ts.map +1 -0
- package/dist/core/phase-detector.js +229 -0
- package/dist/core/phase-detector.js.map +1 -0
- package/dist/core/plugin-detector.d.ts +96 -0
- package/dist/core/plugin-detector.d.ts.map +1 -0
- package/dist/core/plugin-detector.js +349 -0
- package/dist/core/plugin-detector.js.map +1 -0
- package/dist/core/plugin-loader.d.ts +111 -0
- package/dist/core/plugin-loader.d.ts.map +1 -0
- package/dist/core/plugin-loader.js +319 -0
- package/dist/core/plugin-loader.js.map +1 -0
- package/dist/core/plugin-manager.d.ts +144 -0
- package/dist/core/plugin-manager.d.ts.map +1 -0
- package/dist/core/plugin-manager.js +393 -0
- package/dist/core/plugin-manager.js.map +1 -0
- package/dist/core/schemas/plugin-manifest.schema.json +253 -0
- package/dist/core/types/plugin.d.ts +252 -0
- package/dist/core/types/plugin.d.ts.map +1 -0
- package/dist/core/types/plugin.js +48 -0
- package/dist/core/types/plugin.js.map +1 -0
- package/dist/integrations/jira/jira-mapper.d.ts +2 -2
- package/dist/integrations/jira/jira-mapper.js +2 -2
- package/dist/types/cost-tracking.d.ts +43 -0
- package/dist/types/cost-tracking.d.ts.map +1 -0
- package/dist/types/cost-tracking.js +8 -0
- package/dist/types/cost-tracking.js.map +1 -0
- package/dist/types/model-selection.d.ts +53 -0
- package/dist/types/model-selection.d.ts.map +1 -0
- package/dist/types/model-selection.js +12 -0
- package/dist/types/model-selection.js.map +1 -0
- package/dist/utils/cost-reporter.d.ts +58 -0
- package/dist/utils/cost-reporter.d.ts.map +1 -0
- package/dist/utils/cost-reporter.js +224 -0
- package/dist/utils/cost-reporter.js.map +1 -0
- package/dist/utils/pricing-constants.d.ts +70 -0
- package/dist/utils/pricing-constants.d.ts.map +1 -0
- package/dist/utils/pricing-constants.js +71 -0
- package/dist/utils/pricing-constants.js.map +1 -0
- package/package.json +13 -9
- package/src/adapters/adapter-base.ts +33 -0
- package/src/adapters/adapter-interface.ts +46 -0
- package/src/adapters/claude/adapter.ts +164 -0
- package/src/adapters/copilot/adapter.ts +138 -0
- package/src/adapters/cursor/adapter.ts +170 -0
- package/src/adapters/generic/adapter.ts +137 -0
- package/src/agents/architect/AGENT.md +3 -0
- package/src/agents/code-reviewer.md +156 -0
- package/src/agents/data-scientist/AGENT.md +181 -0
- package/src/agents/database-optimizer/AGENT.md +147 -0
- package/src/agents/devops/AGENT.md +3 -0
- package/src/agents/diagrams-architect/AGENT.md +3 -0
- package/src/agents/docs-writer/AGENT.md +3 -0
- package/src/agents/kubernetes-architect/AGENT.md +142 -0
- package/src/agents/ml-engineer/AGENT.md +150 -0
- package/src/agents/mlops-engineer/AGENT.md +201 -0
- package/src/agents/network-engineer/AGENT.md +149 -0
- package/src/agents/observability-engineer/AGENT.md +213 -0
- package/src/agents/payment-integration/AGENT.md +35 -0
- package/src/agents/performance/AGENT.md +3 -0
- package/src/agents/performance-engineer/AGENT.md +153 -0
- package/src/agents/pm/AGENT.md +3 -0
- package/src/agents/qa-lead/AGENT.md +3 -0
- package/src/agents/security/AGENT.md +3 -0
- package/src/agents/sre/AGENT.md +3 -0
- package/src/agents/tdd-orchestrator/AGENT.md +169 -0
- package/src/agents/tech-lead/AGENT.md +3 -0
- package/src/commands/specweave.costs.md +261 -0
- package/src/commands/specweave.increment.md +48 -4
- package/src/commands/specweave.ml-pipeline.md +292 -0
- package/src/commands/specweave.monitor-setup.md +501 -0
- package/src/commands/specweave.slo-implement.md +1055 -0
- package/src/commands/specweave.sync-github.md +1 -1
- package/src/commands/specweave.tdd-cycle.md +199 -0
- package/src/commands/specweave.tdd-green.md +842 -0
- package/src/commands/specweave.tdd-red.md +135 -0
- package/src/commands/specweave.tdd-refactor.md +165 -0
- package/src/hooks/post-increment-plugin-detect.sh +142 -0
- package/src/hooks/post-task-completion.sh +53 -11
- package/src/hooks/pre-task-plugin-detect.sh +96 -0
- package/src/skills/SKILLS-INDEX.md +18 -10
- package/src/skills/billing-automation/SKILL.md +559 -0
- package/src/skills/distributed-tracing/SKILL.md +438 -0
- package/src/skills/e2e-playwright/README.md +1 -1
- package/src/skills/e2e-playwright/package.json +1 -1
- package/src/skills/gitops-workflow/SKILL.md +285 -0
- package/src/skills/gitops-workflow/references/argocd-setup.md +134 -0
- package/src/skills/gitops-workflow/references/sync-policies.md +131 -0
- package/src/skills/grafana-dashboards/SKILL.md +369 -0
- package/src/skills/helm-chart-scaffolding/SKILL.md +544 -0
- package/src/skills/helm-chart-scaffolding/assets/Chart.yaml.template +42 -0
- package/src/skills/helm-chart-scaffolding/assets/values.yaml.template +185 -0
- package/src/skills/helm-chart-scaffolding/references/chart-structure.md +500 -0
- package/src/skills/helm-chart-scaffolding/scripts/validate-chart.sh +244 -0
- package/src/skills/k8s-manifest-generator/SKILL.md +511 -0
- package/src/skills/k8s-manifest-generator/assets/configmap-template.yaml +296 -0
- package/src/skills/k8s-manifest-generator/assets/deployment-template.yaml +203 -0
- package/src/skills/k8s-manifest-generator/assets/service-template.yaml +171 -0
- package/src/skills/k8s-manifest-generator/references/deployment-spec.md +753 -0
- package/src/skills/k8s-manifest-generator/references/service-spec.md +724 -0
- package/src/skills/k8s-security-policies/SKILL.md +334 -0
- package/src/skills/k8s-security-policies/assets/network-policy-template.yaml +177 -0
- package/src/skills/k8s-security-policies/references/rbac-patterns.md +187 -0
- package/src/skills/ml-pipeline-workflow/SKILL.md +245 -0
- package/src/skills/paypal-integration/SKILL.md +467 -0
- package/src/skills/pci-compliance/SKILL.md +466 -0
- package/src/skills/prometheus-configuration/SKILL.md +392 -0
- package/src/skills/slo-implementation/SKILL.md +329 -0
- package/src/skills/stripe-integration/SKILL.md +442 -0
- package/src/skills/tdd-workflow/SKILL.md +378 -0
- package/src/templates/README.md.template +1 -1
- package/src/skills/bmad-method-expert/SKILL.md +0 -626
- package/src/skills/bmad-method-expert/scripts/analyze-project.js +0 -318
- package/src/skills/bmad-method-expert/scripts/check-setup.js +0 -208
- package/src/skills/bmad-method-expert/scripts/generate-template.js +0 -1149
- package/src/skills/bmad-method-expert/scripts/validate-documents.js +0 -340
- package/src/skills/context-optimizer/SKILL.md +0 -588
- package/src/skills/figma-designer/SKILL.md +0 -149
- package/src/skills/figma-implementer/SKILL.md +0 -148
- package/src/skills/figma-mcp-connector/SKILL.md +0 -136
- package/src/skills/figma-to-code/SKILL.md +0 -128
- package/src/skills/spec-kit-expert/SKILL.md +0 -1010
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gitops-workflow
|
|
3
|
+
description: 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.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# GitOps Workflow
|
|
7
|
+
|
|
8
|
+
Complete guide to implementing GitOps workflows with ArgoCD and Flux for automated Kubernetes deployments.
|
|
9
|
+
|
|
10
|
+
## Purpose
|
|
11
|
+
|
|
12
|
+
Implement declarative, Git-based continuous delivery for Kubernetes using ArgoCD or Flux CD, following OpenGitOps principles.
|
|
13
|
+
|
|
14
|
+
## When to Use This Skill
|
|
15
|
+
|
|
16
|
+
- Set up GitOps for Kubernetes clusters
|
|
17
|
+
- Automate application deployments from Git
|
|
18
|
+
- Implement progressive delivery strategies
|
|
19
|
+
- Manage multi-cluster deployments
|
|
20
|
+
- Configure automated sync policies
|
|
21
|
+
- Set up secret management in GitOps
|
|
22
|
+
|
|
23
|
+
## OpenGitOps Principles
|
|
24
|
+
|
|
25
|
+
1. **Declarative** - Entire system described declaratively
|
|
26
|
+
2. **Versioned and Immutable** - Desired state stored in Git
|
|
27
|
+
3. **Pulled Automatically** - Software agents pull desired state
|
|
28
|
+
4. **Continuously Reconciled** - Agents reconcile actual vs desired state
|
|
29
|
+
|
|
30
|
+
## ArgoCD Setup
|
|
31
|
+
|
|
32
|
+
### 1. Installation
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
# Create namespace
|
|
36
|
+
kubectl create namespace argocd
|
|
37
|
+
|
|
38
|
+
# Install ArgoCD
|
|
39
|
+
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
|
|
40
|
+
|
|
41
|
+
# Get admin password
|
|
42
|
+
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
**Reference:** See `references/argocd-setup.md` for detailed setup
|
|
46
|
+
|
|
47
|
+
### 2. Repository Structure
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
gitops-repo/
|
|
51
|
+
├── apps/
|
|
52
|
+
│ ├── production/
|
|
53
|
+
│ │ ├── app1/
|
|
54
|
+
│ │ │ ├── kustomization.yaml
|
|
55
|
+
│ │ │ └── deployment.yaml
|
|
56
|
+
│ │ └── app2/
|
|
57
|
+
│ └── staging/
|
|
58
|
+
├── infrastructure/
|
|
59
|
+
│ ├── ingress-nginx/
|
|
60
|
+
│ ├── cert-manager/
|
|
61
|
+
│ └── monitoring/
|
|
62
|
+
└── argocd/
|
|
63
|
+
├── applications/
|
|
64
|
+
└── projects/
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### 3. Create Application
|
|
68
|
+
|
|
69
|
+
```yaml
|
|
70
|
+
# argocd/applications/my-app.yaml
|
|
71
|
+
apiVersion: argoproj.io/v1alpha1
|
|
72
|
+
kind: Application
|
|
73
|
+
metadata:
|
|
74
|
+
name: my-app
|
|
75
|
+
namespace: argocd
|
|
76
|
+
spec:
|
|
77
|
+
project: default
|
|
78
|
+
source:
|
|
79
|
+
repoURL: https://github.com/org/gitops-repo
|
|
80
|
+
targetRevision: main
|
|
81
|
+
path: apps/production/my-app
|
|
82
|
+
destination:
|
|
83
|
+
server: https://kubernetes.default.svc
|
|
84
|
+
namespace: production
|
|
85
|
+
syncPolicy:
|
|
86
|
+
automated:
|
|
87
|
+
prune: true
|
|
88
|
+
selfHeal: true
|
|
89
|
+
syncOptions:
|
|
90
|
+
- CreateNamespace=true
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### 4. App of Apps Pattern
|
|
94
|
+
|
|
95
|
+
```yaml
|
|
96
|
+
apiVersion: argoproj.io/v1alpha1
|
|
97
|
+
kind: Application
|
|
98
|
+
metadata:
|
|
99
|
+
name: applications
|
|
100
|
+
namespace: argocd
|
|
101
|
+
spec:
|
|
102
|
+
project: default
|
|
103
|
+
source:
|
|
104
|
+
repoURL: https://github.com/org/gitops-repo
|
|
105
|
+
targetRevision: main
|
|
106
|
+
path: argocd/applications
|
|
107
|
+
destination:
|
|
108
|
+
server: https://kubernetes.default.svc
|
|
109
|
+
namespace: argocd
|
|
110
|
+
syncPolicy:
|
|
111
|
+
automated: {}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Flux CD Setup
|
|
115
|
+
|
|
116
|
+
### 1. Installation
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
# Install Flux CLI
|
|
120
|
+
curl -s https://fluxcd.io/install.sh | sudo bash
|
|
121
|
+
|
|
122
|
+
# Bootstrap Flux
|
|
123
|
+
flux bootstrap github \
|
|
124
|
+
--owner=org \
|
|
125
|
+
--repository=gitops-repo \
|
|
126
|
+
--branch=main \
|
|
127
|
+
--path=clusters/production \
|
|
128
|
+
--personal
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### 2. Create GitRepository
|
|
132
|
+
|
|
133
|
+
```yaml
|
|
134
|
+
apiVersion: source.toolkit.fluxcd.io/v1
|
|
135
|
+
kind: GitRepository
|
|
136
|
+
metadata:
|
|
137
|
+
name: my-app
|
|
138
|
+
namespace: flux-system
|
|
139
|
+
spec:
|
|
140
|
+
interval: 1m
|
|
141
|
+
url: https://github.com/org/my-app
|
|
142
|
+
ref:
|
|
143
|
+
branch: main
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### 3. Create Kustomization
|
|
147
|
+
|
|
148
|
+
```yaml
|
|
149
|
+
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
|
150
|
+
kind: Kustomization
|
|
151
|
+
metadata:
|
|
152
|
+
name: my-app
|
|
153
|
+
namespace: flux-system
|
|
154
|
+
spec:
|
|
155
|
+
interval: 5m
|
|
156
|
+
path: ./deploy
|
|
157
|
+
prune: true
|
|
158
|
+
sourceRef:
|
|
159
|
+
kind: GitRepository
|
|
160
|
+
name: my-app
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## Sync Policies
|
|
164
|
+
|
|
165
|
+
### Auto-Sync Configuration
|
|
166
|
+
|
|
167
|
+
**ArgoCD:**
|
|
168
|
+
```yaml
|
|
169
|
+
syncPolicy:
|
|
170
|
+
automated:
|
|
171
|
+
prune: true # Delete resources not in Git
|
|
172
|
+
selfHeal: true # Reconcile manual changes
|
|
173
|
+
allowEmpty: false
|
|
174
|
+
retry:
|
|
175
|
+
limit: 5
|
|
176
|
+
backoff:
|
|
177
|
+
duration: 5s
|
|
178
|
+
factor: 2
|
|
179
|
+
maxDuration: 3m
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
**Flux:**
|
|
183
|
+
```yaml
|
|
184
|
+
spec:
|
|
185
|
+
interval: 1m
|
|
186
|
+
prune: true
|
|
187
|
+
wait: true
|
|
188
|
+
timeout: 5m
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
**Reference:** See `references/sync-policies.md`
|
|
192
|
+
|
|
193
|
+
## Progressive Delivery
|
|
194
|
+
|
|
195
|
+
### Canary Deployment with ArgoCD Rollouts
|
|
196
|
+
|
|
197
|
+
```yaml
|
|
198
|
+
apiVersion: argoproj.io/v1alpha1
|
|
199
|
+
kind: Rollout
|
|
200
|
+
metadata:
|
|
201
|
+
name: my-app
|
|
202
|
+
spec:
|
|
203
|
+
replicas: 5
|
|
204
|
+
strategy:
|
|
205
|
+
canary:
|
|
206
|
+
steps:
|
|
207
|
+
- setWeight: 20
|
|
208
|
+
- pause: {duration: 1m}
|
|
209
|
+
- setWeight: 50
|
|
210
|
+
- pause: {duration: 2m}
|
|
211
|
+
- setWeight: 100
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### Blue-Green Deployment
|
|
215
|
+
|
|
216
|
+
```yaml
|
|
217
|
+
strategy:
|
|
218
|
+
blueGreen:
|
|
219
|
+
activeService: my-app
|
|
220
|
+
previewService: my-app-preview
|
|
221
|
+
autoPromotionEnabled: false
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
## Secret Management
|
|
225
|
+
|
|
226
|
+
### External Secrets Operator
|
|
227
|
+
|
|
228
|
+
```yaml
|
|
229
|
+
apiVersion: external-secrets.io/v1beta1
|
|
230
|
+
kind: ExternalSecret
|
|
231
|
+
metadata:
|
|
232
|
+
name: db-credentials
|
|
233
|
+
spec:
|
|
234
|
+
refreshInterval: 1h
|
|
235
|
+
secretStoreRef:
|
|
236
|
+
name: aws-secrets-manager
|
|
237
|
+
kind: SecretStore
|
|
238
|
+
target:
|
|
239
|
+
name: db-credentials
|
|
240
|
+
data:
|
|
241
|
+
- secretKey: password
|
|
242
|
+
remoteRef:
|
|
243
|
+
key: prod/db/password
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
### Sealed Secrets
|
|
247
|
+
|
|
248
|
+
```bash
|
|
249
|
+
# Encrypt secret
|
|
250
|
+
kubeseal --format yaml < secret.yaml > sealed-secret.yaml
|
|
251
|
+
|
|
252
|
+
# Commit sealed-secret.yaml to Git
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
## Best Practices
|
|
256
|
+
|
|
257
|
+
1. **Use separate repos or branches** for different environments
|
|
258
|
+
2. **Implement RBAC** for Git repositories
|
|
259
|
+
3. **Enable notifications** for sync failures
|
|
260
|
+
4. **Use health checks** for custom resources
|
|
261
|
+
5. **Implement approval gates** for production
|
|
262
|
+
6. **Keep secrets out of Git** (use External Secrets)
|
|
263
|
+
7. **Use App of Apps pattern** for organization
|
|
264
|
+
8. **Tag releases** for easy rollback
|
|
265
|
+
9. **Monitor sync status** with alerts
|
|
266
|
+
10. **Test changes** in staging first
|
|
267
|
+
|
|
268
|
+
## Troubleshooting
|
|
269
|
+
|
|
270
|
+
**Sync failures:**
|
|
271
|
+
```bash
|
|
272
|
+
argocd app get my-app
|
|
273
|
+
argocd app sync my-app --prune
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
**Out of sync status:**
|
|
277
|
+
```bash
|
|
278
|
+
argocd app diff my-app
|
|
279
|
+
argocd app sync my-app --force
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
## Related Skills
|
|
283
|
+
|
|
284
|
+
- `k8s-manifest-generator` - For creating manifests
|
|
285
|
+
- `helm-chart-scaffolding` - For packaging applications
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# ArgoCD Setup and Configuration
|
|
2
|
+
|
|
3
|
+
## Installation Methods
|
|
4
|
+
|
|
5
|
+
### 1. Standard Installation
|
|
6
|
+
```bash
|
|
7
|
+
kubectl create namespace argocd
|
|
8
|
+
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
### 2. High Availability Installation
|
|
12
|
+
```bash
|
|
13
|
+
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/ha/install.yaml
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
### 3. Helm Installation
|
|
17
|
+
```bash
|
|
18
|
+
helm repo add argo https://argoproj.github.io/argo-helm
|
|
19
|
+
helm install argocd argo/argo-cd -n argocd --create-namespace
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Initial Configuration
|
|
23
|
+
|
|
24
|
+
### Access ArgoCD UI
|
|
25
|
+
```bash
|
|
26
|
+
# Port forward
|
|
27
|
+
kubectl port-forward svc/argocd-server -n argocd 8080:443
|
|
28
|
+
|
|
29
|
+
# Get initial admin password
|
|
30
|
+
argocd admin initial-password -n argocd
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Configure Ingress
|
|
34
|
+
```yaml
|
|
35
|
+
apiVersion: networking.k8s.io/v1
|
|
36
|
+
kind: Ingress
|
|
37
|
+
metadata:
|
|
38
|
+
name: argocd-server-ingress
|
|
39
|
+
namespace: argocd
|
|
40
|
+
annotations:
|
|
41
|
+
cert-manager.io/cluster-issuer: letsencrypt-prod
|
|
42
|
+
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
|
|
43
|
+
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
|
|
44
|
+
spec:
|
|
45
|
+
ingressClassName: nginx
|
|
46
|
+
rules:
|
|
47
|
+
- host: argocd.example.com
|
|
48
|
+
http:
|
|
49
|
+
paths:
|
|
50
|
+
- path: /
|
|
51
|
+
pathType: Prefix
|
|
52
|
+
backend:
|
|
53
|
+
service:
|
|
54
|
+
name: argocd-server
|
|
55
|
+
port:
|
|
56
|
+
number: 443
|
|
57
|
+
tls:
|
|
58
|
+
- hosts:
|
|
59
|
+
- argocd.example.com
|
|
60
|
+
secretName: argocd-secret
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## CLI Configuration
|
|
64
|
+
|
|
65
|
+
### Login
|
|
66
|
+
```bash
|
|
67
|
+
argocd login argocd.example.com --username admin
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Add Repository
|
|
71
|
+
```bash
|
|
72
|
+
argocd repo add https://github.com/org/repo --username user --password token
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Create Application
|
|
76
|
+
```bash
|
|
77
|
+
argocd app create my-app \
|
|
78
|
+
--repo https://github.com/org/repo \
|
|
79
|
+
--path apps/my-app \
|
|
80
|
+
--dest-server https://kubernetes.default.svc \
|
|
81
|
+
--dest-namespace production
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## SSO Configuration
|
|
85
|
+
|
|
86
|
+
### GitHub OAuth
|
|
87
|
+
```yaml
|
|
88
|
+
apiVersion: v1
|
|
89
|
+
kind: ConfigMap
|
|
90
|
+
metadata:
|
|
91
|
+
name: argocd-cm
|
|
92
|
+
namespace: argocd
|
|
93
|
+
data:
|
|
94
|
+
url: https://argocd.example.com
|
|
95
|
+
dex.config: |
|
|
96
|
+
connectors:
|
|
97
|
+
- type: github
|
|
98
|
+
id: github
|
|
99
|
+
name: GitHub
|
|
100
|
+
config:
|
|
101
|
+
clientID: $GITHUB_CLIENT_ID
|
|
102
|
+
clientSecret: $GITHUB_CLIENT_SECRET
|
|
103
|
+
orgs:
|
|
104
|
+
- name: my-org
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## RBAC Configuration
|
|
108
|
+
```yaml
|
|
109
|
+
apiVersion: v1
|
|
110
|
+
kind: ConfigMap
|
|
111
|
+
metadata:
|
|
112
|
+
name: argocd-rbac-cm
|
|
113
|
+
namespace: argocd
|
|
114
|
+
data:
|
|
115
|
+
policy.default: role:readonly
|
|
116
|
+
policy.csv: |
|
|
117
|
+
p, role:developers, applications, *, */dev, allow
|
|
118
|
+
p, role:operators, applications, *, */*, allow
|
|
119
|
+
g, my-org:devs, role:developers
|
|
120
|
+
g, my-org:ops, role:operators
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## Best Practices
|
|
124
|
+
|
|
125
|
+
1. Enable SSO for production
|
|
126
|
+
2. Implement RBAC policies
|
|
127
|
+
3. Use separate projects for teams
|
|
128
|
+
4. Enable audit logging
|
|
129
|
+
5. Configure notifications
|
|
130
|
+
6. Use ApplicationSets for multi-cluster
|
|
131
|
+
7. Implement resource hooks
|
|
132
|
+
8. Configure health checks
|
|
133
|
+
9. Use sync windows for maintenance
|
|
134
|
+
10. Monitor with Prometheus metrics
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# GitOps Sync Policies
|
|
2
|
+
|
|
3
|
+
## ArgoCD Sync Policies
|
|
4
|
+
|
|
5
|
+
### Automated Sync
|
|
6
|
+
```yaml
|
|
7
|
+
syncPolicy:
|
|
8
|
+
automated:
|
|
9
|
+
prune: true # Delete resources removed from Git
|
|
10
|
+
selfHeal: true # Reconcile manual changes
|
|
11
|
+
allowEmpty: false # Prevent empty sync
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
### Manual Sync
|
|
15
|
+
```yaml
|
|
16
|
+
syncPolicy:
|
|
17
|
+
syncOptions:
|
|
18
|
+
- PrunePropagationPolicy=foreground
|
|
19
|
+
- CreateNamespace=true
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### Sync Windows
|
|
23
|
+
```yaml
|
|
24
|
+
syncWindows:
|
|
25
|
+
- kind: allow
|
|
26
|
+
schedule: "0 8 * * *"
|
|
27
|
+
duration: 1h
|
|
28
|
+
applications:
|
|
29
|
+
- my-app
|
|
30
|
+
- kind: deny
|
|
31
|
+
schedule: "0 22 * * *"
|
|
32
|
+
duration: 8h
|
|
33
|
+
applications:
|
|
34
|
+
- '*'
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Retry Policy
|
|
38
|
+
```yaml
|
|
39
|
+
syncPolicy:
|
|
40
|
+
retry:
|
|
41
|
+
limit: 5
|
|
42
|
+
backoff:
|
|
43
|
+
duration: 5s
|
|
44
|
+
factor: 2
|
|
45
|
+
maxDuration: 3m
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Flux Sync Policies
|
|
49
|
+
|
|
50
|
+
### Kustomization Sync
|
|
51
|
+
```yaml
|
|
52
|
+
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
|
53
|
+
kind: Kustomization
|
|
54
|
+
metadata:
|
|
55
|
+
name: my-app
|
|
56
|
+
spec:
|
|
57
|
+
interval: 5m
|
|
58
|
+
prune: true
|
|
59
|
+
wait: true
|
|
60
|
+
timeout: 5m
|
|
61
|
+
retryInterval: 1m
|
|
62
|
+
force: false
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Source Sync Interval
|
|
66
|
+
```yaml
|
|
67
|
+
apiVersion: source.toolkit.fluxcd.io/v1
|
|
68
|
+
kind: GitRepository
|
|
69
|
+
metadata:
|
|
70
|
+
name: my-app
|
|
71
|
+
spec:
|
|
72
|
+
interval: 1m
|
|
73
|
+
timeout: 60s
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Health Assessment
|
|
77
|
+
|
|
78
|
+
### Custom Health Checks
|
|
79
|
+
```yaml
|
|
80
|
+
# ArgoCD
|
|
81
|
+
apiVersion: v1
|
|
82
|
+
kind: ConfigMap
|
|
83
|
+
metadata:
|
|
84
|
+
name: argocd-cm
|
|
85
|
+
namespace: argocd
|
|
86
|
+
data:
|
|
87
|
+
resource.customizations.health.MyCustomResource: |
|
|
88
|
+
hs = {}
|
|
89
|
+
if obj.status ~= nil then
|
|
90
|
+
if obj.status.conditions ~= nil then
|
|
91
|
+
for i, condition in ipairs(obj.status.conditions) do
|
|
92
|
+
if condition.type == "Ready" and condition.status == "False" then
|
|
93
|
+
hs.status = "Degraded"
|
|
94
|
+
hs.message = condition.message
|
|
95
|
+
return hs
|
|
96
|
+
end
|
|
97
|
+
if condition.type == "Ready" and condition.status == "True" then
|
|
98
|
+
hs.status = "Healthy"
|
|
99
|
+
hs.message = condition.message
|
|
100
|
+
return hs
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
hs.status = "Progressing"
|
|
106
|
+
hs.message = "Waiting for status"
|
|
107
|
+
return hs
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Sync Options
|
|
111
|
+
|
|
112
|
+
### Common Sync Options
|
|
113
|
+
- `PrunePropagationPolicy=foreground` - Wait for pruned resources to be deleted
|
|
114
|
+
- `CreateNamespace=true` - Auto-create namespace
|
|
115
|
+
- `Validate=false` - Skip kubectl validation
|
|
116
|
+
- `PruneLast=true` - Prune resources after sync
|
|
117
|
+
- `RespectIgnoreDifferences=true` - Honor ignore differences
|
|
118
|
+
- `ApplyOutOfSyncOnly=true` - Only apply out-of-sync resources
|
|
119
|
+
|
|
120
|
+
## Best Practices
|
|
121
|
+
|
|
122
|
+
1. Use automated sync for non-production
|
|
123
|
+
2. Require manual approval for production
|
|
124
|
+
3. Configure sync windows for maintenance
|
|
125
|
+
4. Implement health checks for custom resources
|
|
126
|
+
5. Use selective sync for large applications
|
|
127
|
+
6. Configure appropriate retry policies
|
|
128
|
+
7. Monitor sync failures with alerts
|
|
129
|
+
8. Use prune with caution in production
|
|
130
|
+
9. Test sync policies in staging
|
|
131
|
+
10. Document sync behavior for teams
|