#!/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 if [ -z "${INPUT_REMOTE_DOCKER_USER+x}" ]; then echo "Input remote_docker_user is required!" exit 1 fi # if [ -z "${INPUT_SSH_PUBLIC_KEY+x}" ]; then # echo "Input ssh_public_key is required!" # exit 1 # fi 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 if ! [ -z "${INPUT_DEPLOY_PATH+x}" ]; then echo "Change working directory" echo "Current: `pwd`" echo "Target: $INPUT_DEPLOY_PATH" mkdir -p $INPUT_DEPLOY_PATH cp -rfp ./. $INPUT_DEPLOY_PATH cd $INPUT_DEPLOY_PATH 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 # printf '%s\n' "$INPUT_SSH_PUBLIC_KEY" > ~/.ssh/id_rsa.pub # chmod 600 ~/.ssh/id_rsa.pub #chmod 600 "~/.ssh" eval $(ssh-agent) ssh-add ~/.ssh/id_rsa # echo "Add known hosts" # ssh-keyscan -p $INPUT_REMOTE_DOCKER_PORT "$INPUT_REMOTE_DOCKER_HOST" >> ~/.ssh/known_hosts # ssh-keyscan -p $INPUT_REMOTE_DOCKER_PORT "$INPUT_REMOTE_DOCKER_HOST" >> /etc/ssh/ssh_known_hosts 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 echo " StrictHostKeyChecking no" >> ~/.ssh/config echo " UserKnownHostsFile /dev/null" >> ~/.ssh/config if ! [ -z "${INPUT_SSH_PROXY_CMD+x}" ]; then echo "Add ProxyCommand: $INPUT_SSH_PROXY_CMD" echo " ProxyCommand $INPUT_SSH_PROXY_CMD" >> ~/.ssh/config fi echo >> ~/.ssh/config chmod 600 ~/.ssh/config # echo "docker -v" # echo `docker -v` # echo "docker-compose -v" # echo `docker-compose -v` set context echo "Create docker context" docker context create remote --docker "host=ssh://REMOTE_DOCKER_HOST" docker context use remote # sleep 1h if ! [ -z "${INPUT_DOCKER_REGISTRY_USERNAME+x}" ] && ! [ -z "${INPUT_DOCKER_REGISTRY_PASSWORD+x}" ]; then echo "Connecting to $INPUT_DOCKER_REGISTRY_URI... Command: docker login" echo "$INPUT_DOCKER_REGISTRY_PASSWORD" | docker login -u "$INPUT_DOCKER_REGISTRY_USERNAME" --password-stdin "$INPUT_DOCKER_REGISTRY_URI" fi if ! [ -z "${INPUT_DOCKER_PRUNE+x}" ] && [ $INPUT_DOCKER_PRUNE = 'true' ] ; then yes | docker --log-level debug --host "ssh://$INPUT_REMOTE_DOCKER_HOST:$INPUT_REMOTE_DOCKER_PORT" system prune -a 2>&1 fi DEPLOYMENT_COMMAND="docker --log-level=debug compose" if ! [ -z "${INPUT_STACK_FILE_NAME+x}" ]; then DEPLOYMENT_COMMAND="$DEPLOYMENT_COMMAND -f $INPUT_STACK_FILE_NAME" fi if ! [ -z "${INPUT_ENV_FILE_NAME+x}" ]; then DEPLOYMENT_COMMAND="$DEPLOYMENT_COMMAND --env-file $INPUT_ENV_FILE_NAME" fi # DEPLOYMENT_COMMAND_OPTIONS="" echo "Connecting to $INPUT_REMOTE_DOCKER_HOST... Command: ${DEPLOYMENT_COMMAND} ${INPUT_ARGS}" ${DEPLOYMENT_COMMAND} ${INPUT_ARGS} 2>&1