--- name: deploy-service description: > Despliega un servicio en un servidor remoto via SSH. Usa esta skill cuando el usuario pida hacer deploy, actualizar un servicio, o subir cambios a produccion/staging. Cubre: pull de codigo, build, restart del servicio, y verificacion post-deploy. --- # Deploy de servicio via SSH ## Prerequisitos - El agente debe tener la tool `ssh_command` habilitada - El servidor destino debe estar configurado en `ssh.allowed_targets` - El usuario debe tener permisos de deploy (verificar roles si RBAC esta activo) ## Flujo ### 1. Confirmar parametros Antes de ejecutar, confirmar con el usuario: - **Servicio**: nombre del servicio a desplegar - **Servidor**: host destino (debe estar en allowed_targets) - **Branch/tag**: rama o tag a desplegar (default: main) - **Ruta**: directorio del servicio en el servidor ### 2. Pre-checks Ejecutar en el servidor remoto: ```bash # Verificar conectividad ssh_command: "echo 'OK'" en el host destino # Verificar que el directorio existe ssh_command: "test -d /path/to/service && echo 'exists'" # Verificar estado actual del servicio ssh_command: "systemctl is-active nombre-servicio || true" ``` Si algun pre-check falla, informar al usuario y no continuar. ### 3. Deploy Ejecutar secuencialmente: ```bash # Pull de cambios ssh_command: "cd /path/to/service && git fetch origin && git checkout && git pull" # Build (si aplica) ssh_command: "cd /path/to/service && make build" # o: "cd /path/to/service && go build -o bin/service ./cmd/..." # o: "cd /path/to/service && docker-compose build" # Restart del servicio ssh_command: "sudo systemctl restart nombre-servicio" ``` ### 4. Verificacion post-deploy ```bash # Esperar 5 segundos para que el servicio arranque ssh_command: "sleep 5 && systemctl is-active nombre-servicio" # Verificar logs recientes (buscar errores) ssh_command: "journalctl -u nombre-servicio --since '1 min ago' --no-pager | tail -20" # Health check HTTP si aplica http_get: "http://servidor:puerto/health" ``` ### 5. Reportar resultado Informar al usuario: - Estado del deploy (exitoso/fallido) - Version desplegada (commit hash o tag) - Estado del servicio post-deploy - Cualquier warning en los logs ## Rollback Si el deploy falla o el servicio no arranca: ```bash ssh_command: "cd /path/to/service && git checkout " ssh_command: "sudo systemctl restart nombre-servicio" ``` Informar al usuario que se hizo rollback y el motivo.