a8f3c356d2
Funcion bash que despliega un stack Docker Compose en un host remoto via SSH. Flujo: verificar SSH → git pull → docker-compose pull → docker-compose up -d → listar containers. Soporta compose files adicionales y retorna JSON con status, containers y duracion.
3.4 KiB
3.4 KiB
name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
| name | kind | lang | domain | version | purity | signature | description | tags | uses_functions | uses_types | returns | returns_optional | error_type | imports | params | output | tested | tests | test_file_path | file_path | ||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| docker_compose_remote_deploy | function | bash | infra | 1.0.0 | impure | docker_compose_remote_deploy(host: string, remote_dir: string, branch: string, compose_files: string) -> json | Despliega un stack Docker Compose en un host remoto via SSH. Verifica conectividad, hace git pull del branch indicado, actualiza imagenes con docker-compose pull y levanta/recrea los servicios modificados con docker-compose up -d. Soporta compose files adicionales. Retorna JSON con status, containers corriendo y duracion. |
|
false | error_go_core |
|
JSON con status ('ok'), host, remote_dir, branch, containers (array de nombres corriendo tras el deploy), duration_ms | false | bash/functions/infra/docker_compose_remote_deploy.sh |
Ejemplo
source bash/functions/infra/docker_compose_remote_deploy.sh
# Deploy basico (solo docker-compose.yml, branch main)
result=$(docker_compose_remote_deploy "prod-server" "/opt/apps/element")
echo "$result"
# {"status":"ok","host":"prod-server","remote_dir":"/opt/apps/element","branch":"main","containers":["element-web","synapse","postgres"],"duration_ms":4200}
# Deploy con compose files adicionales y branch especifico
result=$(docker_compose_remote_deploy "prod-server" "/opt/apps/element" "release" "docker-compose.livekit.yml,docker-compose.monitoring.yml")
echo "$result"
# {"status":"ok","host":"prod-server","remote_dir":"/opt/apps/element","branch":"release","containers":[...],"duration_ms":8100}
# Uso desde un pipeline CI/CD
source bash/functions/infra/docker_compose_remote_deploy.sh
docker_compose_remote_deploy "$SSH_HOST" "$REMOTE_DIR" "$GIT_BRANCH" "$EXTRA_COMPOSE" || exit 1
Notas
- Flujo: verificar SSH → git pull → docker-compose pull → docker-compose up -d → listar containers.
- La verificacion SSH usa
-o BatchMode=yes -o ConnectTimeout=5para fallar rapido sin pedir password. - Los compose files adicionales se pasan como
-f file1.yml -f file2.ymla todos los subcomandos compose. docker-compose up -dsolo recrea los servicios cuya imagen o config cambio (comportamiento nativo de compose).- La lista de containers al final incluye TODOS los containers corriendo en el host, no solo los del stack.
- Requiere
jqinstalado en el host remoto para serializar la lista de containers. Si no esta,containerssera[]. - Los mensajes de progreso van a stderr; el JSON final va a stdout.
- Exit code 1 en cualquier fallo (SSH, git pull, compose pull, compose up); el JSON de error NO se emite — el caller debe manejar el exit code.
- El
hostse resuelve con~/.ssh/configincluyendo host, user, identityfile y puerto. - Diferencia con
rsync_deploy: este flujo asume que el codigo ya esta en el remoto (via git) y usa compose.rsync_deploysube archivos locales sin git.