Commit e96b9731 authored by Pedro Eduardo Trujillo's avatar Pedro Eduardo Trujillo
Browse files

Refactoriza y añade avisos sobre login de registry

Actualiza algunos comentarios, reubica código y desglosa partes del
script de despliegue, para mejorar su legibilidad y mantenibilidad.
Describe más acerca del proceso de login a registry, o si se omite por
no contar con credenciales disponibles.
parent b368a75a
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -45,9 +45,9 @@ else
	# Se comprueba si está disponible el plugin compose de docker o el antiguo binario docker-compose.
	if [ ${docker23CompatibleTarget} -eq 0 ]
	then
		getComposeVersionPrefixCmd="docker compose"
		composeBaseCmd="docker compose"
	else
		getComposeVersionPrefixCmd="docker-compose"
		composeBaseCmd="docker-compose"

		checkDockerComposeBinaryCmd="command -v docker-compose > /dev/null"
		if ! ssh ${SSH_PARAMS} "${SSH_REMOTE}" ${checkDockerComposeBinaryCmd}
@@ -59,7 +59,7 @@ else
	fi

	# Se obtiene la versión de Docker Compose disponible en el entorno donde se va a desplegar.
	getComposeVersionCmd="${getComposeVersionPrefixCmd} version --short"
	getComposeVersionCmd="${composeBaseCmd} version --short"
	composeVersion=$(ssh ${SSH_PARAMS} "${SSH_REMOTE}" ${getComposeVersionCmd})

	echo -e "  ${INFO_COLOR}host Docker Compose version [ ${DATA_COLOR}${composeVersion}${INFO_COLOR} ]${NULL_COLOR}"
+36 −23
Original line number Diff line number Diff line
#!/bin/sh

echo -e "\n${INFO_COLOR}Deploying at host ${DATA_COLOR}${remoteHost}${INFO_COLOR} ..${NULL_COLOR}\n"
moveToDeployDirCmd="cd ${deployHome} && "

if [ "${deployingToSwarm}" -ne 0 ]
if [ ! -z "${REGISTRY_USER}" ]
then
	if [ "${docker23CompatibleTarget}" -eq 0 ]
	echo -e "\n${INFO_COLOR}Login to registry ${DATA_COLOR}${REGISTRY_URL:-<default>}${INFO_COLOR} ..${NULL_COLOR}\n"

	loginCmd="\
		${GREP_BIN} \"^${ddRegistryPassVarName}=\" \"${COMPOSE_ENV_FILE_NAME}\" | cut -d= -f2- | \
		docker login -u \"${REGISTRY_USER}\" --password-stdin ${REGISTRY_URL}"

	if ssh ${SSH_PARAMS} "${SSH_REMOTE}" "${moveToDeployDirCmd}${loginCmd}"
	then
		composeBaseCmd="docker compose"
		echo -e "\n${PASS_COLOR}Login to registry was successful!${NULL_COLOR}"
	else
		composeBaseCmd="docker-compose"
		echo -e "\n${FAIL_COLOR}Login to registry failed!${NULL_COLOR}"
	fi

	deployAuthParam="--with-registry-auth"
else
	echo -e "\n${INFO_COLOR}Omitting login to registry${NULL_COLOR}"

	deployAuthParam=""
fi

deployCmd="\
	cd ${deployHome} && \
	if [ ! -z \"${REGISTRY_USER}\" ] ; \
	then \
		${GREP_BIN} \"^${ddRegistryPassVarName}=\" \"${COMPOSE_ENV_FILE_NAME}\" | cut -d= -f2- | docker login -u \"${REGISTRY_USER}\" --password-stdin ${REGISTRY_URL} ; \
		deployAuthParam=\"--with-registry-auth\" ; \
	else \
		deployAuthParam=\"\" ; \
	fi ; \
	if [ ${deployingToSwarm} -eq 0 ] ; \
	then \
		${GREP_BIN} -v '^[#| ]' \"${COMPOSE_ENV_FILE_NAME}\" | sed -r \"s/(\w+)=(.*)/export \1='\2'/g\" > .env-deploy && \
if [ ${deployingToSwarm} -eq 0 ]
then
	deploySwarmCmd="\
		${GREP_BIN} -v '^[#| ]' \"${COMPOSE_ENV_FILE_NAME}\" | \
			sed -r \"s/(\w+)=(.*)/export \1='\2'/g\" > .env-deploy && \
		env -i /bin/sh -c \"\
			. \$(pwd)/.env-deploy && \
			rm \$(pwd)/.env-deploy && \
			docker stack deploy \${deployAuthParam} --resolve-image ${SWARM_RESOLVE_IMAGE} -c ${swarmComposeFileSplitted} ${STACK}\" && \
		if [ ! -z \"\${deployAuthParam}\" ] ; \
			docker stack deploy ${deployAuthParam} --resolve-image ${SWARM_RESOLVE_IMAGE} \
				-c ${swarmComposeFileSplitted} ${STACK}\" && \
		if [ ! -z \"${deployAuthParam}\" ] ; \
		then \
			servicesToAuth=\"${SERVICES_TO_AUTH:-${servicesInComposeFiles}}\" && \
			if [ ! -z \"\${servicesToAuth}\" ] ; \
@@ -38,14 +44,21 @@ deployCmd="\
					docker service update -d \${deployAuthParam} \${serviceToAuth} ; \
				done ; \
			fi ; \
		fi ; \
	else \
		fi"

	deployCmd="${moveToDeployDirCmd}${deploySwarmCmd}"
else
	deployComposeCmd="\
		composeCmd=\"${composeBaseCmd} -f ${standardComposeFileSplitted} -p ${STACK}\" ; \
		\${composeCmd} stop ${SERVICES_TO_DEPLOY} && \
		\${composeCmd} rm -f ${SERVICES_TO_DEPLOY} && \
		\${composeCmd} pull ${SERVICES_TO_DEPLOY} && \
		\${composeCmd} up -d ${SERVICES_TO_DEPLOY} ; \
	fi"
		\${composeCmd} up -d ${SERVICES_TO_DEPLOY}"

	deployCmd="${moveToDeployDirCmd}${deployComposeCmd}"
fi

echo -e "\n${INFO_COLOR}Deploying at host ${DATA_COLOR}${remoteHost}${INFO_COLOR} ..${NULL_COLOR}\n"

ssh ${SSH_PARAMS} "${SSH_REMOTE}" "${deployCmd}"
deployExitCode=${?}
+10 −10
Original line number Diff line number Diff line
@@ -25,7 +25,7 @@ addVariableToEnv() {
	echo -en "${INFO_COLOR}, ${DATA_COLOR}${variableName}${INFO_COLOR}"
}

# Se toma como base el entorno actual, incluyendo solo las variables cuyo nombre comience con el prefijo deseado.
# Incluye desde el entorno actual sólo las variables con el prefijo deseado, aceptando espacios en su valor.
currEnv=$(env | grep "^${ENV_PREFIX}" | sed "s/${ENV_PREFIX}//g" | sed "s/ /${ENV_SPACE_REPLACEMENT}/g")
for currEnvItem in ${currEnv}
do
@@ -39,7 +39,14 @@ do
	addVariableToEnv "${arg}"
done

# Se prepara el fichero .env para usarlas en la máquina destino y se setean en este entorno también.
# Si existen credenciales de registry, se incorporan para poder obtenerlas de forma segura después.
if [ ! -z "${REGISTRY_USER}" ]
then
	ddRegistryPassVarName=DOCKER_DEPLOY_REGISTRY_PASS
	addVariableToEnv "${ddRegistryPassVarName}=${REGISTRY_PASS}"
fi

# Se copia el fichero de valores de entorno, antes de modificarlo. Además, prepara su restauración posterior.
restoreEnvFileCmd="mv '${COMPOSE_ENV_FILE_NAME}-original' '${COMPOSE_ENV_FILE_NAME}'"
if [ ! -f "${COMPOSE_ENV_FILE_NAME}" ]
then
@@ -48,14 +55,7 @@ then
fi
cp -a "${COMPOSE_ENV_FILE_NAME}" "${COMPOSE_ENV_FILE_NAME}-original"

# Si existen credenciales de registry, se incorporan para poder obtenerlas de forma segura después
if [ ! -z "${REGISTRY_USER}" ]
then
	ddRegistryPassVarName=DOCKER_DEPLOY_REGISTRY_PASS
	addVariableToEnv "${ddRegistryPassVarName}=${REGISTRY_PASS}"
fi

# Se vuelcan todas las definiciones de variables al fichero que será empleado para el despliegue
# Se vuelcan las variables recopiladas al fichero de valores de entorno, para usarlas en la máquina destino.
echo -e ${envDefs} >> "${COMPOSE_ENV_FILE_NAME}"

echo -e " ]${NULL_COLOR}\n"