Предисловие
Конечно, есть простой вариант автоматического деплоймента одной строчкой конфига groc'a на github pages, но мы же не ищем лёгких путей.
После 5-х часов мучений на винде и дюжины неудачных сборок, я всё-таки пересел на linux. Так как ruby поставился, gem тоже и даже gem install travis сработал. Но вот travis encrypt я так и не смог заставить работать. Ничего не понятно? Читай дальше.
Зачем это нужно?
- Удобно — не надо париться с обновлением документации. После каждой сборки и прохождения тестов генерится новая документация и пушится в репозиторий.
- Travis encrypt позволяет не выкладывать
всем напоказв паблик репозиторий свой private ssh.
К чему я пришёл
- Нужно сгенерить свой ssh-key и связать его с githab'ом (в первом ответе хорошо объясняется);
- Добавить в файл .travis/deploy_key.pem свой private ssh;
- Добавить на travis-виртуальной машинке свой ssh;
- Выполнить всё, что надо со своим репозиторием.
Пробема: все увидят твой private ssh key.
Для решения этой проблемки и нужен travis encrypt. Скормив ему свой ключик и получив rsa из aes'a, можно не бояться, что кто-то чужой, злой и нуждающийся в твоём бесполезном репозитории злоумышленник сможет так легко сломать твой проект.
Реализация всего этого
Итак, объясняю, как всё делать в консоли linux:
- Ставим руби (версию 1.9.3 или выше):
sudo apt-get install ruby1.9.3
- Ставим travis (может потребовать установить какие-нибудь зависимости для gem'а, но это не проблема):
gem install travis
- Теперь можно шифровать свои файлики и переменные окружения.
- Генерим ssh-key и соединяемся с репозиторием (в моём случае это github) по нему (ссылка на инструкцию выше);
- теперь в ~/.ssh/id_rsa лежит ваш частный ключ, чтобы зашифровать его выполним следующее
travis encrypt-file ~/.ssh/id_rsa --add
опция --add сразу добавит зашифрованный файл/переменную в .travis.yml
- лично у меня почему-то выходной файл после шифрования выглядел, как ~/.ssh/id_rsa, что приводило к ошибке — просто убрал обратный слэш
- также я не хотел, чтобы при сборке все видели мой e-mail. Его я тоже зашифровал:
travis encrypt MY_MAIL="a.a.pakhomoff@gmail.com" --add
теперь нужно только в требуемом месте файла .travis.yml добавить $MY_MAIL вместо «a.a.pakhomoff@gmail.com»
- остаётся самое логичное, но не самое простое: подключиться по ssh к репозиторию с правами пуша с тревиса под своим именем, выполнить необходимую логику (не настаиваю, что моя идеально, но работает) и запушить в нужную ветку (причём тревис клонирует не весь репозиторий, а только ветку, с которой сработал хук пуша)
Итоговый файл .travis.yml с пояснениями
language: node_js
node_js:
- '0.12'
notifications:
email: false
before_install:
- openssl aes-256-cbc -K $encrypted_ca96f6bc6cbe_key -iv $encrypted_ca96f6bc6cbe_iv
-in .travis/id_rsa.enc -out ~/.ssh/id_rsa -d # то, что добавилось после шифрования
# файла, я только указал явно, откуда брать зашифрованный и куда его расшифровать
# удаляем прежнюю документацию, чтобы заменить на свежую сгенеренную
- git rm -rf doc/*
before_script:
# тоже зашифрованная переменная с моим e-mail адресом
- git config --global user.email $MY_MAIL
- git config --global user.name "Travis-CI"
after_success:
- chmod 600 ~/.ssh/id_rsa # именно такие права должны быть у файла с частным ключом
# кстати, при создании ssh-key необходимо оставить пустым passphrase,
# иначе по shh-add будет просить ввод этой фразы
# активируем агента и добавляем ssh-key
- eval "$(ssh-agent)"
- ssh-add
# ну дальше, в общем, всё понятно: добавляем то,
# что есть, прячем изменения, переключаемся на ветку,
# в которую надо сохранить доки и мёржимся со спрятанными
# изменениями по стратегии взять то, что там
- git remote add deploy git@github.com:Faverick/trendets.git
- git add doc/*
- git stash
- git checkout develop
- git merge --squash --strategy-option=theirs stash
- git stash clear
- git commit -m "Documentation updated"
- git push deploy develop
env:
global: # а это мой e-mail
secure: h4uLA8Fu/ncekMDeYYS7kI8Nh0FIv+XaQ2DAW5AuRsA3dqcgxvlnOA0vnkYmnvGmZ8amcRYqNq7MX/apzPwtv7GkXf7WcGgDnCfoxLcZiva/e4P51ZU62B4iYbIQ1OMCKkQvenS+Ajtk7yxKYqiEEhRyjoCpLJMzzNd0uQR5uH0=
P.S. очень много информации взял из документации Travis CI