4.0 KiB
4.0 KiB
Deployment Automation Guide
Date: 2025-01-27 Purpose: Guide for automating deployments across projects Status: Complete
Overview
This guide provides strategies and tools for automating deployments across the integrated workspace.
Deployment Strategies
1. Blue-Green Deployment
Strategy: Deploy new version alongside old, switch traffic
Benefits:
- Zero downtime
- Easy rollback
- Safe testing
Implementation:
# Deploy green environment
kubectl apply -f deployment-green.yaml
# Test green environment
curl https://green.example.com/health
# Switch traffic
kubectl patch service app -p '{"spec":{"selector":{"version":"green"}}}'
# Keep blue for rollback
2. Canary Deployment
Strategy: Gradual rollout to subset of users
Benefits:
- Risk mitigation
- Gradual validation
- Easy rollback
Implementation:
# Deploy canary (10% traffic)
apiVersion: v1
kind: Service
metadata:
name: app
spec:
selector:
app: app
version: canary
ports:
- port: 80
3. Rolling Deployment
Strategy: Incremental replacement of instances
Benefits:
- No downtime
- Resource efficient
- Standard Kubernetes
Implementation:
spec:
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
GitOps Workflows
ArgoCD
Setup:
# Install ArgoCD
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
Application:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: dbis-core
spec:
project: default
source:
repoURL: https://github.com/org/repo
path: dbis_core/k8s
targetRevision: main
destination:
server: https://kubernetes.default.svc
namespace: dbis-core
syncPolicy:
automated:
prune: true
selfHeal: true
Flux
Setup:
# Install Flux
flux install
# Create GitRepository
flux create source git dbis-core \
--url=https://github.com/org/repo \
--branch=main
# Create Kustomization
flux create kustomization dbis-core \
--source=dbis-core \
--path="./dbis_core/k8s" \
--prune=true
CI/CD Integration
GitHub Actions
name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build
run: pnpm build
- name: Deploy to Kubernetes
run: |
kubectl set image deployment/app \
app=registry.example.com/app:${{ github.sha }}
GitLab CI/CD
deploy:
stage: deploy
script:
- kubectl set image deployment/app \
app=registry.gitlab.com/group/project:$CI_COMMIT_SHA
only:
- main
Infrastructure as Code
Terraform Deployment
# Plan
terraform plan -out=tfplan
# Apply
terraform apply tfplan
# Destroy (if needed)
terraform destroy
Ansible Deployment
- name: Deploy application
hosts: app_servers
tasks:
- name: Pull latest image
docker_container:
name: app
image: registry.example.com/app:latest
state: started
Monitoring Deployments
Health Checks
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
Deployment Status
# Check deployment status
kubectl rollout status deployment/app
# View deployment history
kubectl rollout history deployment/app
# Rollback if needed
kubectl rollout undo deployment/app
Best Practices
Pre-Deployment
- Run all tests
- Security scanning
- Dependency audit
- Documentation update
During Deployment
- Monitor metrics
- Check logs
- Verify health
- Test functionality
Post-Deployment
- Monitor for issues
- Verify metrics
- Check alerts
- Update status page
Last Updated: 2025-01-27