Сборка с использованием SSH

Иногда при выполнении сборки требуется подключаться к другим машинам: например, если вы хотите запустить скрипт развертывания на удаленной машине через SSH.

Давайте посмотрим, как это сделать.

Преимущества SSH

Протокол Secure Shell (SSH) широко используется в самых разных целях благодаря своей безопасности, гибкости и эффективности. Вот несколько причин использовать SSH:

  • Безопасная связь. SSH обеспечивает шифрование при соединении по небезопасной сети (например, через интернет) и гарантирует конфиденциальность и целостность передаваемых данных.
  • Аутентификация. SSH использует для аутентификации пользователей метод криптографии с открытым ключом, который безопаснее аутентификации по паролю. Это помогает защититься от несанкционированного доступа.
  • Удаленный доступ. SSH обеспечивает пользователям безопасный доступ к удаленному серверу или компьютеру через интерфейс командной строки, а также передачу файлов с помощью таких инструментов, как SCP или SFTP.
  • Туннелирование. SSH может создавать безопасные туннели для ретрансляции произвольных сетевых соединений, обеспечивая безопасный доступ к различным службам, например, к базам данных или веб-серверам в удаленных сетях.
  • Управление ключами. SSH поддерживает использование SSH-ключей. Это упрощает аутентификацию и повышает ее безопасность. Кроме того, это позволяет управлять доступом с помощью пар ключей.

Загрузка SSH-ключа в TeamCity

В меню Edit configuration | Build Steps можно посмотреть все шаги сборки.

tutorials-img

Допустим, вам нужно добавить шаг сборки с использованием командной строки для выполнения развертывания. При этом TeamCity подключается к удаленному серверу через SSH и выполняет несколько команд на этом сервере: например, скачивает файл из Amazon S3 и исполняет его. Чтобы установить подключение по SSH, нужно указать SSH-ключ.

tutorials-img

Вопрос в следующем: как добавить SSH-ключ в билд-агент, если его нет в сохраненном образе агента?

Нам нужно исключить шаг с использованием командной строки. Для этого откройте раскрывающийся список Runner type. В нем вы увидите два пункта: SSH Exec и SSH Upload.

SSH Exec is convenient for when you want to execute something on a remote machine. SSH Upload полезен для безопасной загрузки файлов на сервер.

Выбираем вариант SSH Exec и добавляем целевое устройство и команды для раннера.

tutorials-img

В списке Authentication method — несколько вариантов источников SSH-ключа.

tutorials-img

Uploaded key: ключ загружен на сервер TeamCity. Сервер его шифрует, отправляет в билд-агент для выполнения сборки, а после завершения сборки удаляет.

Default private key и Custom private key: выбирайте этот вариант, если закрытый ключ по умолчанию установлен в определенном месте билд-агента.

Можно также выбрать сочетание имени пользователя и пароля или даже использовать запущенный SSH-агент. Подробнее о SSH Exec читайте в документации.

В нашем случае мы используем вариант Uploaded key. Зададим имя пользователя teamcity-deploy, а пароль опустим. Теперь загружаем SSH-ключ.

tutorials-img

Для этого перейдите в Buildpipelines project | SSH Keys. и выберите закрытый ключ для сервера. Нажмите Upload SSH Key и выберите файл на своем компьютере.

tutorials-img

Затем вернитесь в меню Build steps | SSH Exec и выберите загруженный закрытый ключ. Нажмите Save и запустите сборку.

tutorials-img

По завершении сборки откройте журнал (Build Log), и вы увидите результат выполнения шага SSH Exec. Здесь мы видим, что была выполнена команда, указанная в конфигурации шага сборки. Кроме того, будет показан результат выполнения команды echo ‘running deploy.sh...’.

tutorials-img

Вот и все!