devops
Deploy applications with Docker and Kubernetes, automate with CI/CD, manage infrastructure with code, and configure cloud platforms and networking.
$ 安裝
git clone https://github.com/pluginagentmarketplace/custom-plugin-backend /tmp/custom-plugin-backend && cp -r /tmp/custom-plugin-backend/skills/devops ~/.claude/skills/custom-plugin-backend// tip: Run this command in your terminal to install the skill
name: devops description: Deploy applications with Docker and Kubernetes, automate with CI/CD, manage infrastructure with code, and configure cloud platforms and networking. sasmp_version: "2.0.0" bonded_agent: 06-devops-infrastructure bond_type: PRIMARY_BOND
=== PRODUCTION-GRADE SKILL CONFIG (SASMP v2.0.0) ===
atomic_operations:
- CONTAINERIZATION
- KUBERNETES_DEPLOYMENT
- CI_CD_PIPELINE
- INFRASTRUCTURE_PROVISIONING
parameter_validation: query: type: string required: true minLength: 5 maxLength: 2500 platform: type: string enum: [aws, gcp, azure, on-prem] required: false orchestrator: type: string enum: [kubernetes, docker-swarm, ecs] required: false
retry_logic: max_attempts: 3 backoff: exponential initial_delay_ms: 2000
logging_hooks: on_invoke: "skill.devops.invoked" on_success: "skill.devops.completed" on_error: "skill.devops.failed"
exit_codes: SUCCESS: 0 INVALID_INPUT: 1 DEPLOYMENT_FAILED: 2 SECURITY_ISSUE: 3
DevOps & Infrastructure Skill
Bonded to: devops-infrastructure-agent
Quick Start
# Invoke devops skill
"Containerize my Python application with Docker"
"Set up a CI/CD pipeline with GitHub Actions"
"Deploy my app to Kubernetes"
Instructions
- Containerize: Create optimized Docker images
- Orchestrate: Configure Kubernetes or Docker Swarm
- Automate: Set up CI/CD pipelines
- Provision: Deploy infrastructure with Terraform
- Monitor: Configure observability stack
Docker Best Practices
Optimized Dockerfile
# Multi-stage build for smaller images
FROM python:3.12-slim AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user --no-cache-dir -r requirements.txt
FROM python:3.12-slim
RUN useradd --create-home appuser
USER appuser
WORKDIR /app
COPY --from=builder /root/.local /home/appuser/.local
ENV PATH=/home/appuser/.local/bin:$PATH
COPY --chown=appuser:appuser . .
HEALTHCHECK --interval=30s --timeout=3s \
CMD curl -f http://localhost:8000/health || exit 1
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
Image Checklist
- Use slim/alpine base images
- Multi-stage builds
- Non-root user
- Health checks
- .dockerignore file
Kubernetes Essentials
Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-server
spec:
replicas: 3
selector:
matchLabels:
app: api-server
template:
metadata:
labels:
app: api-server
spec:
containers:
- name: api-server
image: myapp:v1.0.0
ports:
- containerPort: 8000
resources:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "256Mi"
cpu: "500m"
livenessProbe:
httpGet:
path: /health
port: 8000
readinessProbe:
httpGet:
path: /ready
port: 8000
CI/CD Pipeline (GitHub Actions)
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-python@v5
with:
python-version: '3.12'
- run: pip install -r requirements.txt
- run: pytest --cov=app tests/
build:
needs: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: docker/build-push-action@v5
with:
push: true
tags: myregistry/myapp:${{ github.sha }}
deploy:
needs: build
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- run: kubectl set image deployment/api-server api-server=myregistry/myapp:${{ github.sha }}
Decision Tree
Deployment need?
│
├─→ Simple app → Docker Compose
│
├─→ Production, scaling needed
│ ├─→ Cloud-native → Kubernetes
│ └─→ AWS only → ECS
│
└─→ Serverless → AWS Lambda / Cloud Functions
Troubleshooting
Common Issues
| Issue | Cause | Solution |
|---|---|---|
| Pod CrashLoopBackOff | App crash | Check logs: kubectl logs <pod> |
| ImagePullBackOff | Registry auth | Verify imagePullSecrets |
| OOMKilled | Memory limit | Increase limits or optimize |
| Pending pods | No resources | Scale cluster |
Debug Commands
# Pod status
kubectl get pods -o wide
# Pod logs
kubectl logs <pod> --previous
# Describe pod
kubectl describe pod <pod>
# Events
kubectl get events --sort-by='.lastTimestamp'
# Exec into pod
kubectl exec -it <pod> -- /bin/sh
Test Template
# tests/test_docker.py
import subprocess
class TestDockerBuild:
def test_dockerfile_builds_successfully(self):
result = subprocess.run(
["docker", "build", "-t", "test-image", "."],
capture_output=True, text=True
)
assert result.returncode == 0
def test_container_starts_and_healthy(self):
subprocess.run(["docker", "run", "-d", "--name", "test", "test-image"])
# Wait for health check
result = subprocess.run(
["docker", "inspect", "--format", "{{.State.Health.Status}}", "test"],
capture_output=True, text=True
)
assert "healthy" in result.stdout
Resources
Repository
