Travis CI: Автоматическая доставка кода на удаленный сервер по SSH
В данной статье хотелось бы немного поговорить о тонкостях настройки Travis CI для доставки кода проекта по SSH.
Немного общей информации, как говорит википедия, Travis CI - это распределённый веб-сервис для сборки и тестирования программного обеспечения, использующий GitHub в качестве хостинга исходного кода.
Внутри компании мы используем GitLab для хранения и управленя репозиториями кода проектов и у него есть свой CI (GitLab CI), который на мой взгляд тоже очень удобен, но для него нужно ставить отдельный сервер, а для проекта с открытым исходным кодом столько возни не очень хочется и тратить денег на отдельный сервер, а Travis CI позволяет бесплатно его использовать, за что спасибо им.
Главное, это файл в корне проекта .travis.yml, не в первой в статьях ссылаюсь на офф документацию, но как составить сам файл можно почитать тут, а я остановлюсь только на доставке кода по ssh на удаленный сервер.
Во-первых, вам нужен аккаунт на GitHub.
Затем авторизоваться на travis-ci.org и выбрать проект для использования с сервисом. Остальные настройки там примитивны, так что пойдем дальше.
###Деплой приложения по ssh
В корне проекта, где у вас лежит файл .travis.yml, нужно сгенерировать ssh-ключи, добавить зашфированное значение ключа в travis.yml и залить на удаленный сервер, следующим образом:
- генерируем ssh ключи:
ssh-keygen -t rsa -b 4096 -C 'build@travis-ci.org' -f ./deploy_key - добавляем закрытый ключ в
.travis.ymlи шифруем его (нужно сперва поставить утилиту от travis, вот тут почитать):travis encrypt-file deploy_key --add - открытый ключ копируем на удаленный сервер, к которому будем подключаться из
Travis(userиhostваши данные к удаленному серверу):ssh-copy-id -i deploy_key.pub user@host - затем удаляем открытый и приватный ключ:
rm -f deploy_key deploy_key.pub - и добавляем зашифрованный файл в git:
git add deploy_key.enc
После, заливаем изменения и смотрим в консоли Travis CI результаты работы выполнения.
При подключении по ssh могут возникнуть проблемы с SSH Known Hosts, вот тут рассказано, что нужно добавить в файл .travis.yml для решения проблемы.