Обычно я выполняю следующую работу в .gitlab-ci.yml
для выполнения команд на удаленном сервере через SSH:
# The job
deploy:
script:
# I've omitted the SSH setup here
- |
ssh gitlab@example.com "
# Makes the server print the executed commands to stdout. Otherwise only the command output is printed. Required for monitoring and debug.
set -x &&
# Executes some commands
cd /var/www/example &&
command1 &&
command2 &&
command3 &&
command4 &&
command5
"
Он работает правильно, но код YAML выглядит слишком сложным:
- Команда
set -x
- это скорее шаблон, чем полезный код. Это не требуется для обычных команд CI, потому что GitLab CI печатает их автоматически.
&&
на каждой линии тоже шаблон. Они делают остановку выполнения при сбое одной из команд. В противном случае следующие команды будут выполнены при сбое (в отличие от обычных команд задания).
- Все команды SSH представляют собой одну строку YAML, поэтому редакторы не выделяют комментарии и команды, поэтому код трудно читать.
Существует ли более понятный и удобный способ выполнения нескольких команд на удаленном компьютере через SSH без минусов, описанных выше?
Я бы не хотел использовать внешние инструменты развертывания, такие как Ansible, чтобы максимально упростить настройку компакт-диска (приветствуются команды по умолчанию для POSIX / Linux). Я также рассмотрел возможность выполнения каждой команды в отдельном вызове ssh
, но я боюсь, что это может увеличить время выполнения задания из-за нескольких соединений SSH (но я не уверен):
deploy:
script:
- ssh gitlab@example.com "cd /var/www/example"
- ssh gitlab@example.com "command1"
- ssh gitlab@example.com "command2"
# ...