Synthèse automatique
Cette skill guide la conteneurisation d'applications, le déploiement Kubernetes, la mise en place de pipelines CI/CD GitHub Actions et le provisionnement d'infrastructure avec Terraform.
Points forts
- Fournit un Dockerfile multi-stage prêt à l'emploi avec utilisateur non-root et HEALTHCHECK
- Inclut un manifeste Kubernetes complet avec ressources, liveness et readiness probes
- Donne un pipeline GitHub Actions en trois étapes (test, build, deploy) directement réutilisable
- Propose un arbre de décision pour choisir entre Docker Compose, Kubernetes et autres options
Limites
- Les exemples sont centrés sur Python/FastAPI et GitHub Actions, peu transposables tels quels à d'autres stacks
- Le provisionnement Terraform et la stack d'observabilité sont annoncés mais aucun exemple concret n'est fourni
- La configuration SASMP (retry, exit codes, logging hooks) est déclarative et n'est pas explicitée en instructions exécutables
À utiliser lorsqu'il faut créer ou durcir un Dockerfile, écrire un manifeste Kubernetes ou structurer un pipeline CI/CD de bout en bout.
À éviter pour du conseil cloud spécifique (coûts AWS, IAM fin) ou du débogage d'incident en production, que la skill ne couvre pas.
Analyse de sécurité
SûrThe skill provides standard DevOps guidance and examples (Dockerfile, Kubernetes manifests, GitHub Actions, troubleshooting commands). It does not instruct destructive, exfiltrating, obfuscated, or safety-disabling actions; kubectl/docker commands are ordinary and non-destructive.
Aucun point d'attention détecté
Comment cette analyse est faiteExemples
Containerize my FastAPI application with Docker using a multi-stage build, a non-root user and a health check.Write a Kubernetes Deployment and Service for my api-server image with 3 replicas, resource limits and liveness/readiness probes.Set up a GitHub Actions CI/CD pipeline that runs pytest, builds and pushes a Docker image, then deploys to Kubernetes on main.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
Du fichier au premier essai
Le téléchargement contient exactement le contenu affiché sur cette fiche. Cette copie peut différer de la dernière version du dépôt source.
Consulter la source et ses fichiers annexesCe téléchargement contient uniquement SKILL.md. Les scripts, références, modèles et dépendances éventuels ne sont pas inclus. Récupérez les fichiers nécessaires depuis la source en conservant leur arborescence avant de poursuivre.
1. Télécharger le fichier
Télécharger SKILL.mdDepuis la racine d’un projet de test, enregistrez le fichier sous .skill-downloads/devops-infrastructure-ms1aw5km/SKILL.md, ou utilisez la commande suivante. Ce dossier sert à examiner la skill avant son installation.
Commande pour macOS/Linux ou WSL : un shell POSIX et curl sont nécessaires. Sous Windows sans WSL, utilisez le bouton de téléchargement et créez le dossier manuellement.
mkdir -p '.skill-downloads/devops-infrastructure-ms1aw5km' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/devops-infrastructure-ms1aw5km/download' --output '.skill-downloads/devops-infrastructure-ms1aw5km/SKILL.md.part' && mv '.skill-downloads/devops-infrastructure-ms1aw5km/SKILL.md.part' '.skill-downloads/devops-infrastructure-ms1aw5km/SKILL.md'2. Vérifier les prérequis
Lisez SKILL.md avant de l’utiliser. Si le fichier cite des scripts ou services externes, examinez-les et préparez les accès nécessaires dans votre environnement de test.
Aucune section de prérequis reconnue dans ce fichier. Cela ne signifie pas qu’il est autonome : les bibliothèques, outils et accès peuvent être cités ailleurs dans le contenu ou dans le dépôt source.
Les plateformes de la fiche sont des indications du catalogue. Les chemins ci-dessous suivent la documentation des outils ; ils ne prouvent pas que cette skill y a été exécutée. Aucune version minimale de ces outils n’est attestée pour cette fiche.
3. Charger la skill
Après vérification, copiez le dossier complet dans le projet avec l’une des commandes ci-dessous, puis ouvrez une nouvelle session de l’outil. La commande s’arrête si un dossier du même nom existe déjà : comparez les fichiers avant de le remplacer.
Claude Code
test -f '.skill-downloads/devops-infrastructure-ms1aw5km/SKILL.md' && test -s '.skill-downloads/devops-infrastructure-ms1aw5km/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/devops' && cp -R '.skill-downloads/devops-infrastructure-ms1aw5km' '.claude/skills/devops'OpenSkills
OpenSkills doit déjà être installé. La procédure locale install/read est contrôlée avec OpenSkills 1.5.0, qui exige Node.js ≥ 20.6.0. Aucun slug du catalogue n’est résolu automatiquement.
Installation officielle d’OpenSkillsopenskills install './.skill-downloads/devops-infrastructure-ms1aw5km'openskills read 'devops-infrastructure-ms1aw5km'La lecture doit afficher le contenu du fichier installé et son dossier de base. Elle ne lance ni la skill ni ses dépendances.
Pour un agent qui lit AGENTS.md, synchronisez ensuite l’index. Cette commande modifie AGENTS.md : relisez le diff avant de l’utiliser.
openskills syncMode manuel ou autre outil : joignez SKILL.md à une conversation, ou ouvrez-le dans un agent capable de lire les fichiers. Ajoutez les ressources annexes nécessaires. Il n’existe pas de dossier universel reconnu par tous les outils.
4. Faire un premier essai
Utilisez une entrée courte et fictive : un endpoint d’API, un petit document ou un brief d’interface. Dans une nouvelle conversation, joignez le fichier ou donnez son chemin à l’agent, puis adaptez cette demande :
Lis .skill-downloads/devops-infrastructure-ms1aw5km/SKILL.md et applique ses instructions à cet exemple : [décrire une entrée de test]. Indique les fichiers, dépendances ou accès qui manquent. Produis le résultat demandé par la skill sans inventer de données ni exécuter de script non examiné.Résultat attendu : une sortie correspondant aux instructions de la skill, ou une liste précise des prérequis manquants. Une simple confirmation de lecture ne valide pas le premier usage. Si une ressource externe est indisponible, ce parcours reste à tester.
Configurer un canal de discussion avec SecretRefs
DevOps
Configurez des canaux de discussion avec des commandes non interactives, les secrets étant uniquement des SecretRefs. Couvre les étapes de collecte, modification, réparation et vérification.
Enquêter sur les échecs CI de ClickHouse
DevOps
Investigue un échec CI de ClickHouse de bout en bout à partir d'une URL de PR ou de rapport S3. Récupère les tests échoués, classe flaky vs vraie régression, et cherche des issues/fixes existants.
Revue de PR Ansible
DevOps
Examine une PR Ansible selon le processus standardisé du projet, incluant la validation des changelogs, la couverture de tests et le suivi des commentaires.