--- name: devops description: Configure CI/CD, Docker, and cloud deployments. Use for deployment setup, containers, or infrastructure automation. --- # DevOps CI/CD pipelines, containerization, and deployment automation. ## When to Use - Setting up CI/CD pipelines - Creating Dockerfiles - Configuring deployments - Troubleshooting builds - Infrastructure automation ## Docker ### Dockerfile Best Practices ```dockerfile # Multi-stage build FROM node:20-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . RUN npm run build FROM node:20-alpine AS runner WORKDIR /app ENV NODE_ENV=production COPY --from=builder /app/dist ./dist COPY --from=builder /app/node_modules ./node_modules USER node EXPOSE 3000 CMD ["node", "dist/index.js"] ``` ### Docker Compose ```yaml version: "3.8" services: app: build: . ports: - "3000:3000" environment: - DATABASE_URL=postgres://db:5432/app depends_on: - db healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3000/health"] interval: 30s timeout: 10s retries: 3 db: image: postgres:15-alpine volumes: - postgres_data:/var/lib/postgresql/data environment: - POSTGRES_DB=app - POSTGRES_PASSWORD_FILE=/run/secrets/db_password secrets: - db_password volumes: postgres_data: secrets: db_password: file: ./secrets/db_password.txt ``` ## GitHub Actions ```yaml name: CI/CD on: push: branches: [main] pull_request: branches: [main] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 20 cache: "npm" - run: npm ci - run: npm test - run: npm run lint deploy: needs: test if: github.ref == 'refs/heads/main' runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Deploy run: | echo "Deploying to production" ``` ## Kubernetes Basics ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: app spec: replicas: 3 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: app image: myapp:latest ports: - containerPort: 3000 resources: requests: memory: "128Mi" cpu: "100m" limits: memory: "256Mi" cpu: "200m" livenessProbe: httpGet: path: /health port: 3000 initialDelaySeconds: 10 periodSeconds: 30 ``` ## Examples **Input:** "Set up CI/CD for this project" **Action:** Detect framework, create GitHub Actions workflow, add tests and deploy steps **Input:** "Dockerize this app" **Action:** Create optimized Dockerfile, docker-compose for local dev, document usage