Многострочный удаленный скрипт SSH - PullRequest
0 голосов
/ 19 апреля 2019

Я пытался в течение 2 часов переписать эту команду SSH с немедленным выполнением в многострочную форму, чтобы она была более читабельной, но каждый раз у меня что-то не так.Я пробовал несколько способов, как описано в похожих вопросах, но я просто сосал в BASH.Я пытаюсь сделать

echo "Deploying $1 to remote"
sudo ssh -i ../keys/key.pem username@$2 '
    id=$(docker ps -a -q -f name=$1); if [ -n "$id" ]; then docker rm --force $1; fi; 
    docker run -d --network host -v /var/log/$1/:/var/log/$1/ 
        -e SERVER_PORT=80 
    --name $1 username/image:$1'

Я хочу запустить образ docker remotelly с некоторыми аргументами, созданными remotelly ($id), а некоторые развернуты локально перед выполнением сценария ($1, $2).

1 Ответ

2 голосов
/ 19 апреля 2019

Возможно, вам будет проще написать это, если вы напишите его как отдельный скрипт:

#!/bin/sh
container="$1"
id=$(docker ps -aq -f name="$container")
if [ -n "$id" ]; then
  ...
fi
...

Запустите его вручную в целевой системе, чтобы убедиться, что он делает то, что вам нужно.

Получив это, вы можете скопировать сценарий и запустить его двумя отдельными командами:

echo "Deploying $1 to remote"
scp -i ../keys/key.pem launch-container.sh "username@$2:/tmp/launch-container.sh"
ssh -i ../keys/key.pem "username@$2" sh /tmp/launch-container.sh "$1"

Вы также можете взглянуть на различные инструменты автоматизации системы, специально предназначенные для такого рода задач.Я не согласен с Ansible за то, что он не требует выделенного сервера и работает над ssh так же, как вы показываете; имеет набор связанных с Docker команд , которые могут выполнять этот набор задач довольно напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...