Настройка непрерывной доставки (Continuous delivery CD) для вашего проекта c github.com
Hеобходимо:
- Репозиторий на github.com
- Сервер для Ansible (для примера ip: 1.1.1.1)
- Сервер для развертывания вашего проекта (для примера ip: 2.2.2.2)
- Локальная машина с настроенным проектом
- Базовые знания работы в командной строке, Travis CI и Ansible
Настройка сервера, на котором мы развернем проект
[ root@2.2.2.2 ] adduser ansible #добавить пользователя, из под которого Ansible будет заходить на сервер и в директории которого развернем наш проект [ root@2.2.2.2 ] su - ansible [ ansible@2.2.2.2 ] ssh-keygen -t rsa -b 4096 -C 'github' -f ~/.ssh/github_key #сгенерировать ключ без passphrase для деплоя репозитория [ ansible@2.2.2.2 ] eval "$(ssh-agent -s)"
[ ansible@2.2.2.2 ] ssh-add ~/.ssh/github_key [ ansible@2.2.2.2 ] cat ~/.ssh/github_key.pub #вывести на экран и скопировать публичный ключ github_key.pub
Добавить публичный ключ github_key.pub в ключи для деплоя репозитория на github.com
(В настройках репозитория github.com вкладка «Deploy keys»)
Настройка сервера с Ansible
[ root@1.1.1.1 ] yum install ansible [ root@1.1.1.1 ] adduser ansible #добавить пользователя, из под которого Travis будет заходить на этот сервер [ root@1.1.1.1 ] su - ansible [ ansible@1.1.1.1 ] ssh-keygen -t rsa -b 4096 -C 'ansible' -f ~/.ssh/ansible_key #сгенерировать ключ без passphrase для подключения к серверу с проектом [ ansible@1.1.1.1 ] eval "$(ssh-agent -s)"
[ ansible@1.1.1.1 ] ssh-add ~/.ssh/ansible_key [ ansible@1.1.1.1 ] cat ~/.ssh/ansible_key.pub #вывести на экран и скопировать публичный ключ ansible_key.pub
Добавить публичный ключ ansible_key.pub на сервер нашего проекта
[ ansible@2.2.2.2 ] mcedit .ssh/authorized_keys [ ansible@2.2.2.2 ] chmod 600 .ssh/authorized_keys
Добавить в файл hosts.yml ip сервера нашего проекта
[ ansible@1.1.1.1 ] mcedit /path/to/ansible/hosts.yml
hosts.yml
[ansible] 2.2.2.2
Написать небольшой playbook, который будет выкладывать актуальную версию ветки master
[ ansible@1.1.1.1 ] mcedit /path/to/ansible/playbook.yml
playbook.yml
- hosts: all user: ansible tasks: - name: Clone git repo git: repo: ssh://git@github.com/{github_username}/{github_repo}.git dest: /home/ansible/var/www/{github_repo} version: master accept_hostkey: yes force: yes
Настройка Travis
Зарегистрироваться на сайте travis-ci.org через свой аккаунт github.com
Включить интеграцию для нужного репозитория
В настройках репозитория Travis включить:
- Build only if .travis.yml is present
- Build branch updates
На своей локальной машине, где у вас развернут проект
Установить утилиту travis и авторизоваться
[ user@local ] gem install travis [ user@local ] travis login --auto
Сгенерировать ssh ключ без passphrase, с помощью которого Travis будет подключаться к серверу Ansible
[ user@local ] ssh-keygen -t rsa -b 4096 -C 'travis' -f travis_key #сгенеририровать ключ без passphrase для подключения Travis к серверу с Ansible [ user@local ] cat travis_key.pub #вывести на экран и скопировать публичный ключ travis_key.pub
Добавить публичный ключ travis_key.pub на сервер Ansible
в файл /home/ansible/.ssh/authorized_keys
[ ansible@1.1.1.1 ] mcedit /home/ansible/.ssh/authorized_keys [ ansible@1.1.1.1 ] chmod 600 /home/ansible/.ssh/authorized_keys
Зашифровать приватный ключ утилитой travis
[ user@local ] travis encrypt-file travis_key --add
На выходе должен появиться файл travis_key.enc и .travis.yml
В файле .travis.yml будет строка для дешифрования нашего ключа вроде этой
openssl aes-256-cbc -K $encrypted_412afa050e5f_key -iv $encrypted_412afa050e5f_iv -in travis_key.enc -out /tmp/travis_key -d
Добавить оба файла в git
[ user@local ] git add travis_key.enc .travis.yml
Отредактировть файл .travis.yml
[ user@local ] mcedit /path/to/repo/.travis.yml
.travis.yml
language: node_js #проект будет на node_js install: true #мы не будем устанавливать дополнительные зависимости и проводить тесты sudo: false branches: #деплой проекта будет только при изменениях в ветке master only: - master script: - openssl aes-256-cbc -K $encrypted_412afa050e5f_key -iv $encrypted_412afa050e5f_iv -in travis_key.enc -out /tmp/travis_key -d #дешифруем ключ - eval "$(ssh-agent -s)" - chmod 600 /tmp/travis_key - ssh-add /tmp/travis_key - ssh -o "StrictHostKeyChecking no" ansible@1.1.1.1 'ansible-playbook playbook.yml' #подключаемся к серверу Ansible и запускаем playbook
Залить изменения в git
[ user@local ] git push origin master
После этого на странице репозитория в Travis должен появиться примерно вот такой Build
The command "openssl aes-256-cbc -K $encrypted_412afa050e5f_key -iv $encrypted_412afa050e5f_iv -in travis_key.enc -out /tmp/travis_key -d" exited with 0. 0.01s$ eval "$(ssh-agent -s)" Agent pid 1842 The command "eval "$(ssh-agent -s)"" exited with 0. 0.01s$ chmod 600 /tmp/travis_key The command "chmod 600 /tmp/travis_key" exited with 0. 0.01s$ ssh-add /tmp/travis_key Identity added: /tmp/travis_key (/tmp/travis_key) The command "ssh-add /tmp/travis_key" exited with 0. 16.68s$ ssh -o "StrictHostKeyChecking no" ansible@2.2.2.2 'ansible-playbook playbook.yml' Warning: Permanently added '2.2.2.2' (ECDSA) to the list of known hosts. PLAY [all] ********************************************************************* TASK [setup] ******************************************************************* ok: [2.2.2.2] TASK [Clone git repo] ********************************************************** changed: [2.2.2.2] PLAY RECAP ********************************************************************* 2.2.2.2 : ok=1 changed=1 unreachable=0 failed=0 The command "ssh -o "StrictHostKeyChecking no" ansible@2.2.2.2 'ansible-playbook playbook.yml" exited with 0. Done. Your build exited with 0.
Теперь при изменениях в ветке master запуститься Travis, который вызовет Ansible, а тот выложит свежую версию вашего кода на сервер с проектом.
Надеюсь, что кому нибудь пригодится эта инструкция.
ссылка на оригинал статьи https://habrahabr.ru/post/325438/
Добавить комментарий