ci: allow nas compose deploy via sudo docker
This commit is contained in:
@@ -159,9 +159,11 @@ jobs:
|
||||
|
||||
remote="${NAS_USER}@${NAS_HOST}"
|
||||
ssh_opts="-p ${NAS_PORT} -o BatchMode=no -o StrictHostKeyChecking=yes"
|
||||
sudo_password_b64="$(printf '%s' "${NAS_SSH_PASSWORD}" | base64 | tr -d '\n')"
|
||||
|
||||
SSHPASS="${NAS_SSH_PASSWORD}" sshpass -e ssh ${ssh_opts} "${remote}" \
|
||||
"DEPLOY_BASE='${DEPLOY_BASE}' RELEASE_ID='${RELEASE_ID}' IMAGE_TAG='${IMAGE_TAG}' KEEP_RELEASES='${KEEP_RELEASES}' sh -se" <<'REMOTE_SCRIPT'
|
||||
{
|
||||
printf 'SUDO_PASSWORD_B64=%s\n' "${sudo_password_b64}"
|
||||
cat <<'REMOTE_SCRIPT'
|
||||
set -eu
|
||||
|
||||
release_dir="${DEPLOY_BASE}/releases/${RELEASE_ID}"
|
||||
@@ -180,21 +182,46 @@ jobs:
|
||||
echo "Created ${shared_dir}/.env from .env.example. Edit it on the NAS before production traffic if secrets are still placeholders."
|
||||
fi
|
||||
|
||||
docker compose version
|
||||
SUDO_PASSWORD="$(printf '%s' "${SUDO_PASSWORD_B64}" | base64 -d 2>/dev/null || true)"
|
||||
unset SUDO_PASSWORD_B64
|
||||
|
||||
IMAGE_TAG="${IMAGE_TAG}" DOCKER_BUILDKIT=1 docker compose \
|
||||
docker_cmd() {
|
||||
if [ "${DOCKER_MODE}" = "sudo" ]; then
|
||||
printf '%s\n' "${SUDO_PASSWORD}" | sudo -S -p "" docker "$@"
|
||||
else
|
||||
docker "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
compose_cmd() {
|
||||
docker_cmd compose "$@"
|
||||
}
|
||||
|
||||
if docker info >/dev/null 2>&1; then
|
||||
DOCKER_MODE="direct"
|
||||
elif command -v sudo >/dev/null 2>&1 && [ -n "${SUDO_PASSWORD}" ] && printf '%s\n' "${SUDO_PASSWORD}" | sudo -S -p "" docker info >/dev/null 2>&1; then
|
||||
DOCKER_MODE="sudo"
|
||||
else
|
||||
echo "Cannot access Docker daemon as $(id -un). Add the user to the docker group or allow sudo docker."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Docker access mode: ${DOCKER_MODE}"
|
||||
compose_cmd version
|
||||
|
||||
IMAGE_TAG="${IMAGE_TAG}" DOCKER_BUILDKIT=1 compose_cmd \
|
||||
--env-file "${shared_dir}/.env" \
|
||||
-f "${release_dir}/deploy/docker-compose.yaml" \
|
||||
config >/tmp/geo-rankly-compose.yaml
|
||||
|
||||
IMAGE_TAG="${IMAGE_TAG}" DOCKER_BUILDKIT=1 docker compose \
|
||||
IMAGE_TAG="${IMAGE_TAG}" DOCKER_BUILDKIT=1 compose_cmd \
|
||||
--env-file "${shared_dir}/.env" \
|
||||
-f "${release_dir}/deploy/docker-compose.yaml" \
|
||||
up -d --build --remove-orphans
|
||||
|
||||
ln -sfn "${release_dir}" "${DEPLOY_BASE}/current"
|
||||
|
||||
IMAGE_TAG="${IMAGE_TAG}" docker compose \
|
||||
IMAGE_TAG="${IMAGE_TAG}" compose_cmd \
|
||||
--env-file "${shared_dir}/.env" \
|
||||
-f "${release_dir}/deploy/docker-compose.yaml" \
|
||||
ps
|
||||
@@ -206,6 +233,8 @@ jobs:
|
||||
| xargs -r rm -rf
|
||||
fi
|
||||
REMOTE_SCRIPT
|
||||
} | SSHPASS="${NAS_SSH_PASSWORD}" sshpass -e ssh ${ssh_opts} "${remote}" \
|
||||
"DEPLOY_BASE='${DEPLOY_BASE}' RELEASE_ID='${RELEASE_ID}' IMAGE_TAG='${IMAGE_TAG}' KEEP_RELEASES='${KEEP_RELEASES}' sh -se"
|
||||
|
||||
- name: Deployment summary
|
||||
run: |
|
||||
|
||||
Reference in New Issue
Block a user