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 для решения проблемы.