Files
docker-remote-deployment-ac…/docker-entrypoint.sh

95 lines
2.8 KiB
Bash
Raw Normal View History

2021-12-25 23:28:35 +07:00
#!/bin/sh
set -eu
if [ -z "${INPUT_REMOTE_DOCKER_PORT+x}" ]; then
INPUT_REMOTE_DOCKER_PORT=22
fi
if [ -z "${INPUT_REMOTE_DOCKER_HOST+x}" ]; then
echo "Input remote_docker_host is required!"
exit 1
fi
2024-03-07 16:29:14 +08:00
if [ -z "${INPUT_REMOTE_DOCKER_USER+x}" ]; then
echo "Input remote_docker_user is required!"
exit 1
fi
2021-12-25 23:28:35 +07:00
if [ -z "${INPUT_SSH_PRIVATE_KEY+x}" ]; then
echo "Input ssh_private_key is required!"
exit 1
fi
if [ -z "${INPUT_ARGS+x}" ]; then
echo "Input input_args is required!"
exit 1
fi
2024-03-08 16:00:54 +08:00
if [ $INPUT_DEPLOY_PATH ]; then
2024-03-07 16:29:14 +08:00
echo "Change working directory"
echo "Current: `pwd`"
echo "Target: $INPUT_DEPLOY_PATH"
mkdir -p $INPUT_DEPLOY_PATH
2024-03-07 23:24:03 +08:00
cp -rfp ./. $INPUT_DEPLOY_PATH
2024-03-07 16:29:14 +08:00
cd $INPUT_DEPLOY_PATH
2021-12-25 23:28:35 +07:00
fi
if [ -z "${INPUT_DOCKER_REGISTRY_URI+x}" ]; then
INPUT_DOCKER_REGISTRY_URI=https://registry.hub.docker.com
fi
echo "Registering SSH keys..."
# register the private key with the agent.
mkdir -p ~/.ssh
ls ~/.ssh
printf '%s\n' "$INPUT_SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
eval $(ssh-agent)
ssh-add ~/.ssh/id_rsa
2024-03-07 16:29:14 +08:00
echo "Add REMOTE_DOCKER_HOST alias to ~/.ssh/config"
touch ~/.ssh/config
echo >> ~/.ssh/config
echo "Host REMOTE_DOCKER_HOST" >> ~/.ssh/config
echo " HostName $INPUT_REMOTE_DOCKER_HOST" >> ~/.ssh/config
echo " User $INPUT_REMOTE_DOCKER_USER" >> ~/.ssh/config
echo " Port $INPUT_REMOTE_DOCKER_PORT" >> ~/.ssh/config
echo " IdentityFile ~/.ssh/id_rsa" >> ~/.ssh/config
2024-03-07 22:13:18 +08:00
echo " StrictHostKeyChecking no" >> ~/.ssh/config
echo " UserKnownHostsFile /dev/null" >> ~/.ssh/config
2024-03-08 16:00:54 +08:00
if [ $INPUT_SSH_PROXY_CMD ]; then
2024-03-07 16:29:14 +08:00
echo "Add ProxyCommand: $INPUT_SSH_PROXY_CMD"
echo " ProxyCommand $INPUT_SSH_PROXY_CMD" >> ~/.ssh/config
fi
echo >> ~/.ssh/config
2024-03-07 18:41:51 +08:00
chmod 600 ~/.ssh/config
2024-03-07 16:29:14 +08:00
2021-12-25 23:28:35 +07:00
set context
echo "Create docker context"
2024-03-07 16:29:14 +08:00
docker context create remote --docker "host=ssh://REMOTE_DOCKER_HOST"
2021-12-25 23:28:35 +07:00
docker context use remote
2024-03-08 15:54:10 +08:00
if [ $INPUT_DOCKER_REGISTRY_USERNAME ] && [ $INPUT_DOCKER_REGISTRY_PASSWORD ]; then
2024-03-07 16:29:14 +08:00
echo "Connecting to $INPUT_DOCKER_REGISTRY_URI... Command: docker login"
2021-12-25 23:28:35 +07:00
echo "$INPUT_DOCKER_REGISTRY_PASSWORD" | docker login -u "$INPUT_DOCKER_REGISTRY_USERNAME" --password-stdin "$INPUT_DOCKER_REGISTRY_URI"
fi
2024-03-08 16:00:54 +08:00
if [ $INPUT_DOCKER_PRUNE ] && [ $INPUT_DOCKER_PRUNE = 'true' ] ; then
2021-12-25 23:28:35 +07:00
yes | docker --log-level debug --host "ssh://$INPUT_REMOTE_DOCKER_HOST:$INPUT_REMOTE_DOCKER_PORT" system prune -a 2>&1
fi
2024-03-07 16:29:14 +08:00
DEPLOYMENT_COMMAND="docker --log-level=debug compose"
2024-03-08 12:22:22 +08:00
2024-03-08 16:00:54 +08:00
if [ $INPUT_STACK_FILE_NAME ]; then
2024-03-08 00:34:26 +08:00
DEPLOYMENT_COMMAND="$DEPLOYMENT_COMMAND -f ${INPUT_STACK_FILE_NAME//,/ -f }"
2024-03-06 15:56:47 +08:00
fi
2024-03-06 15:30:43 +08:00
2024-03-08 16:00:54 +08:00
if [ $INPUT_ENV_FILE_NAME ]; then
2024-03-08 00:46:35 +08:00
DEPLOYMENT_COMMAND="$DEPLOYMENT_COMMAND --env-file ${INPUT_ENV_FILE_NAME//,/ --env-file }"
2021-12-25 23:28:35 +07:00
fi
2024-03-08 12:22:22 +08:00
2024-03-07 16:29:14 +08:00
# DEPLOYMENT_COMMAND_OPTIONS=""
2021-12-25 23:28:35 +07:00
2024-03-07 16:29:14 +08:00
echo "Connecting to $INPUT_REMOTE_DOCKER_HOST... Command: ${DEPLOYMENT_COMMAND} ${INPUT_ARGS}"
${DEPLOYMENT_COMMAND} ${INPUT_ARGS} 2>&1