Awesome-omni-skill deploy
Full deployment lifecycle including pre-checks, execution, verification, rollback, and documentation.
git clone https://github.com/diegosouzapw/awesome-omni-skill
T=$(mktemp -d) && git clone --depth=1 https://github.com/diegosouzapw/awesome-omni-skill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/devops/deploy-dwoolworth" ~/.claude/skills/diegosouzapw-awesome-omni-skill-deploy-2fb6c4 && rm -rf "$T"
skills/devops/deploy-dwoolworth/SKILL.mdOPS Deployment Skill
Overview
The deployment skill covers the full lifecycle of deploying code to production: pre-checks, execution, verification, rollback, and documentation. Every deployment follows this process. No shortcuts.
Pre-Deployment Checklist
Before any deployment, verify ALL of the following:
- CQ Review passed: Confirm a CQ approval comment exists on the ticket
- QA Testing passed: Confirm a QA PASS comment exists on the ticket
- Ticket is in
status: Only deploy tickets that have reached Ready for Productionrfp - Infrastructure health is green: All existing services are healthy before introducing changes
- Dependencies are in place: Database migrations staged, environment variables set, external service dependencies confirmed
- Rollback plan documented: You know exactly how to revert this deployment
- Deployment notes reviewed: Any special instructions from DEV, CQ, or QA are understood
- No conflicting deployments in progress: One deployment at a time to isolate issues
If ANY item on this checklist is not satisfied, STOP. Do not deploy. Communicate the blocker in #standup and on the ticket.
Docker Deployment Commands
Build and Tag the Image
docker build -t ${SERVICE_NAME}:${VERSION} -f Dockerfile . docker tag ${SERVICE_NAME}:${VERSION} ${REGISTRY}/${SERVICE_NAME}:${VERSION} docker tag ${SERVICE_NAME}:${VERSION} ${REGISTRY}/${SERVICE_NAME}:latest
Push to Registry
docker push ${REGISTRY}/${SERVICE_NAME}:${VERSION} docker push ${REGISTRY}/${SERVICE_NAME}:latest
Deploy with Docker Compose
# Pull latest images docker compose -f docker-compose.prod.yml pull # Deploy with zero-downtime (if configured) docker compose -f docker-compose.prod.yml up -d --remove-orphans # Verify containers are running docker compose -f docker-compose.prod.yml ps
Direct Container Deployment
# Stop the old container docker stop ${SERVICE_NAME} || true docker rm ${SERVICE_NAME} || true # Run the new container docker run -d \ --name ${SERVICE_NAME} \ --restart unless-stopped \ --network ${NETWORK_NAME} \ -p ${HOST_PORT}:${CONTAINER_PORT} \ --env-file .env.production \ ${REGISTRY}/${SERVICE_NAME}:${VERSION} # Verify the container is healthy docker inspect --format='{{.State.Health.Status}}' ${SERVICE_NAME}
Kubernetes Deployment Commands
Apply Deployment Manifest
# Apply the deployment kubectl apply -f k8s/deployment.yaml -n ${NAMESPACE} # Watch the rollout kubectl rollout status deployment/${DEPLOYMENT_NAME} -n ${NAMESPACE} --timeout=300s
Verify the Deployment
# Check pod status kubectl get pods -n ${NAMESPACE} -l app=${APP_LABEL} # Check pod logs for errors kubectl logs -n ${NAMESPACE} -l app=${APP_LABEL} --tail=50 # Describe deployment for events kubectl describe deployment/${DEPLOYMENT_NAME} -n ${NAMESPACE}
Scale a Deployment
# Scale up/down kubectl scale deployment/${DEPLOYMENT_NAME} -n ${NAMESPACE} --replicas=${REPLICA_COUNT} # Verify scaling kubectl get pods -n ${NAMESPACE} -l app=${APP_LABEL}
Rollback Procedures
Docker Rollback
# Stop the current (broken) container docker stop ${SERVICE_NAME} docker rm ${SERVICE_NAME} # Run the previous version docker run -d \ --name ${SERVICE_NAME} \ --restart unless-stopped \ --network ${NETWORK_NAME} \ -p ${HOST_PORT}:${CONTAINER_PORT} \ --env-file .env.production \ ${REGISTRY}/${SERVICE_NAME}:${PREVIOUS_VERSION} # Verify rollback docker inspect --format='{{.State.Health.Status}}' ${SERVICE_NAME}
Docker Compose Rollback
# Revert to previous image tags in compose file, then: docker compose -f docker-compose.prod.yml up -d --remove-orphans docker compose -f docker-compose.prod.yml ps
Kubernetes Rollback
# Rollback to the previous revision kubectl rollout undo deployment/${DEPLOYMENT_NAME} -n ${NAMESPACE} # Watch the rollback kubectl rollout status deployment/${DEPLOYMENT_NAME} -n ${NAMESPACE} --timeout=300s # Verify pods are healthy after rollback kubectl get pods -n ${NAMESPACE} -l app=${APP_LABEL} # Check rollout history kubectl rollout history deployment/${DEPLOYMENT_NAME} -n ${NAMESPACE}
Rollback Decision Criteria
Execute a rollback immediately if any of the following occur:
- Health checks fail after deployment
- Error rates spike above baseline threshold
- Response times degrade significantly
- Critical functionality is broken
- Data integrity issues detected
Do NOT attempt to "fix forward" if the issue is unclear. Roll back first, then investigate.
Post-Deployment Verification
After every deployment, verify ALL of the following:
Health Checks
# HTTP health check curl -sf ${SERVICE_URL}/health || echo "HEALTH CHECK FAILED" # Detailed health with dependencies curl -s ${SERVICE_URL}/health/detailed | jq .
Smoke Tests
# Verify critical endpoints are responding curl -sf -o /dev/null -w "%{http_code}" ${SERVICE_URL}/api/status curl -sf -o /dev/null -w "%{http_code}" ${SERVICE_URL}/api/ping
Monitoring Verification
# Check error rates (should not spike) # Check response times (should not degrade) # Check resource usage (should be within normal bounds) # Check logs for new error patterns docker logs ${SERVICE_NAME} --since 5m 2>&1 | grep -i error || echo "No errors found"
Monitoring Setup
Every deployed service must have:
- Health check endpoint: Returns 200 when healthy, non-200 when degraded
- Metrics exposure: CPU, memory, request count, error rate, response time
- Log aggregation: Structured logs shipped to central logging
- Alerting rules: Alerts on health check failure, error rate spike, resource exhaustion
Deployment Documentation Template
Every deployment gets a comment on the ticket with this structure:
## Deployment Record **Ticket:** #[TICKET_ID] **Deployed by:** ops **Timestamp:** [ISO 8601 timestamp] **Environment:** [production/staging] **Version:** [version tag or commit hash] **Previous Version:** [what was running before] ### Changes Deployed [Brief description of what this deployment includes] ### Deployment Method [Docker Compose / Kubernetes / Direct Container] ### Pre-Deployment Checks - [x] CQ review confirmed - [x] QA pass confirmed - [x] Infrastructure health verified - [x] Rollback plan prepared - [x] Dependencies in place ### Post-Deployment Verification - [x] Health checks passing - [x] Smoke tests passing - [x] Error rates nominal - [x] Response times nominal - [x] Monitoring dashboards green ### Rollback Plan To rollback this deployment: 1. [Exact rollback command or steps] 2. [Verification after rollback] 3. [Notify team in #standup] ### Notes [Any observations, warnings, or follow-up items]