Commit 97b30002 authored by Pedro Eduardo Trujillo's avatar Pedro Eduardo Trujillo
Browse files

Adapta scripts a docker >= v23 y retrocompatibles

Adapta comandos 'docker-compose' a 'docker compose', teniendo en cuenta
la versión docker presente en el destino del despliegue.

Introduce comprobación de config compose con comando 'docker stack
config', disponible en nuevas versiones docker. Se emplea cuando se
establece que el despliegue va dirigido a un entorno swarm.

Comprueba dependencias docker y compose al inicio en entorno destino del
despliegue.

Especifica con qué objetivo se valida la config compose, según sea para
compose o para swarm.

Actualiza valores por defecto de variables, tal como se documentó en
readme.
parent 94bac6cd
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -4,8 +4,13 @@ servicesToCheck="${SERVICES_TO_CHECK}"
if [ -z "${servicesToCheck}" ]
then
	standardComposeFileSplitted=$(echo ${COMPOSE_FILE} | sed 's/:/ -f /g')
	if [ ${DOCKER_23_COMPATIBLE_TARGET} -eq 0 ]
	then
		servicesToCheck=$(docker --log-level error compose -f ${standardComposeFileSplitted} config --services | sed "s/^/${STACK}_/g")
	else
		servicesToCheck=$(docker-compose --log-level ERROR -f ${standardComposeFileSplitted} config --services | sed "s/^/${STACK}_/g")
	fi
fi

echo -e "\n${INFO_COLOR}Checking deployment of services [${DATA_COLOR} $(echo ${servicesToCheck}) ${INFO_COLOR}] at ${DATA_COLOR}${remoteHost}${INFO_COLOR} ..${NULL_COLOR}"

+2 −2
Original line number Diff line number Diff line
@@ -2,10 +2,10 @@

ENV_PREFIX="${ENV_PREFIX:-DD_}"
ENV_SPACE_REPLACEMENT="${ENV_SPACE_REPLACEMENT:-<dd-space>}"
COMPOSE_FILE="${COMPOSE_FILE:-docker-compose.yml}"
COMPOSE_FILE="${COMPOSE_FILE:-compose.yaml}"
DEPLOY_PATH="${DEPLOY_PATH:-~}"
DEPLOY_DIR_NAME="${DEPLOY_DIR_NAME:-deploy}"
DEFAULT_DEPLOY_FILES="${DEFAULT_DEPLOY_FILES:-docker-compose*.yml .env}"
DEFAULT_DEPLOY_FILES="${DEFAULT_DEPLOY_FILES:-*compose*.y*ml .env}"
FORCE_DOCKER_COMPOSE="${FORCE_DOCKER_COMPOSE:-0}"
OMIT_CLEAN_DEPLOY="${OMIT_CLEAN_DEPLOY:-0}"
SWARM_RESOLVE_IMAGE="${SWARM_RESOLVE_IMAGE:-always}"
+12 −2
Original line number Diff line number Diff line
@@ -23,7 +23,12 @@ deployCmd="\
			servicesToAuth=\"${SERVICES_TO_AUTH}\" && \
			if [ -z \"\${servicesToAuth}\" ] ; \
			then \
				if [ ${DOCKER_23_COMPATIBLE_TARGET} -eq 0 ] ; \
				then \
					servicesToAuth=\"\$(docker --log-level error compose -f \${standardComposeFileSplitted} config --services | sed \"s/^/${STACK}_/g\")\" ; \
				else \
					servicesToAuth=\"\$(docker-compose --log-level ERROR -f \${standardComposeFileSplitted} config --services | sed \"s/^/${STACK}_/g\")\" ; \
				fi ; \
			fi && \
			if [ ! -z \"\${servicesToAuth}\" ] ; \
			then \
@@ -34,7 +39,12 @@ deployCmd="\
			fi ; \
		fi ; \
	else \
		composeCmd=\"docker-compose -f \${standardComposeFileSplitted} -p ${STACK}\" && \
		if [ ${DOCKER_23_COMPATIBLE_TARGET} -eq 0 ] ; \
		then \
			composeCmd=\"docker compose -f \${standardComposeFileSplitted} -p ${STACK}\" ; \
		else \
			composeCmd=\"docker-compose -f \${standardComposeFileSplitted} -p ${STACK}\" ; \
		fi && \
		\${composeCmd} stop ${SERVICES_TO_DEPLOY} && \
		\${composeCmd} rm -f ${SERVICES_TO_DEPLOY} && \
		\${composeCmd} pull ${SERVICES_TO_DEPLOY} && \
+44 −6
Original line number Diff line number Diff line
#!/bin/sh

# Se comprueba si está disponible el binario docker en el entorno donde se va a desplegar
checkDockerCmd="docker --version > /dev/null"
if ! ssh ${SSH_PARAMS} "${SSH_REMOTE}" ${checkDockerCmd}
then
	echo -e "${FAIL_COLOR}Docker is not available at remote environment!${NULL_COLOR}"
	exit 1
fi

# Se comprueba si la versión de Docker en el entorno donde se va a desplegar es >= v23.0.0
checkDocker23Cmd="dockerMajor=\$(docker --version | sed -r 's/.* ([0-9]+).*/\1/g'); [ \${dockerMajor} -ge 23 ]"
DOCKER_23_COMPATIBLE_TARGET=$(ssh ${SSH_PARAMS} "${SSH_REMOTE}" ${checkDocker23Cmd})

# Se comprueba si está disponible el plugin compose de docker o el antiguo binario docker-compose
if [ ${DOCKER_23_COMPATIBLE_TARGET} -eq 0 ]
then
	checkDockerComposeCmd="docker compose version > /dev/null"
else
	checkDockerComposeCmd="docker-compose version > /dev/null"
fi
if ! ssh ${SSH_PARAMS} "${SSH_REMOTE}" ${checkDockerComposeCmd}
then
	echo -e "${FAIL_COLOR}Docker Compose (both v1 or v2) is not available at remote environment!${NULL_COLOR}"
	exit 1
fi

echo -e "\n${INFO_COLOR}Preparing deployment configuration and resources ..${NULL_COLOR}"

randomValue="$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 8 | head -n 1)"
@@ -46,17 +71,30 @@ done
echo -e ${envDefs} >> .env

echo -e " ]${NULL_COLOR}"
echo -e "\n${INFO_COLOR}Checking deployment configuration in docker-compose files ..${NULL_COLOR}"
echo -e "\n${INFO_COLOR}Checking deployment configuration in compose files ..${NULL_COLOR}"
echo -e "  ${INFO_COLOR}compose files [ ${DATA_COLOR}${COMPOSE_FILE}${INFO_COLOR} ]${NULL_COLOR}\n"

# Antes de continuar, se comprueba que la configuración de despliegue sea válida.
if docker-compose config > /dev/null
# Antes de continuar, se comprueba que la configuración de despliegue sea válida para compose o swarm.
checkDeploymentTypeCmd="[ ${FORCE_DOCKER_COMPOSE} -eq 0 ] && [ ${DOCKER_23_COMPATIBLE_TARGET} -eq 0 ] && docker stack ls > /dev/null 2> /dev/null"
if ssh ${SSH_PARAMS} "${SSH_REMOTE}" ${checkDeploymentTypeCmd}
then
	swarmComposeFileSplitted=$(echo ${COMPOSE_FILE} | sed 's/:/ -c /g')
	if docker stack config -q -c ${swarmComposeFileSplitted}
	then
	echo -e "${PASS_COLOR}Valid docker-compose configuration!${NULL_COLOR}"
		echo -e "${PASS_COLOR}Valid (for Docker Swarm) compose configuration!${NULL_COLOR}"
	else
	echo -e "${FAIL_COLOR}Invalid docker-compose configuration!${NULL_COLOR}"
		echo -e "${FAIL_COLOR}Invalid (for Docker Swarm) compose configuration!${NULL_COLOR}"
		exit 1
	fi
else
	if docker compose config -q
	then
		echo -e "${PASS_COLOR}Valid (for Docker Compose) compose configuration!${NULL_COLOR}"
	else
		echo -e "${FAIL_COLOR}Invalid (for Docker Compose) compose configuration!${NULL_COLOR}"
		exit 1
	fi
fi

echo -e "\n${INFO_COLOR}Sending deployment resources to remote ${DATA_COLOR}${remoteHost}${INFO_COLOR} ..${NULL_COLOR}"
echo -e "  ${INFO_COLOR}deployment path [ ${DATA_COLOR}${DEPLOY_HOME}${INFO_COLOR} ]${NULL_COLOR}"