3. Реальный мир
$ git clone git://github.com/project.git
$ читаем README
$ wget -O SDL_image-1.2.11.tar.gz http://goo.gl/98zi6
$ ./configure && make
$ sudo make install
$ пытаемся запустить хотя бы один тест
$ ищем помощи у коллег
$ MAGIC_CONST=23 prepare-run --fix-missing
$ run
7. Почему?
‣ создавать рабочие окружения тяжело
‣ распространять еще сложнее (README не
установит требуемое ПО за нас)
‣ никакой изоляции (конфликтующие
бинарники)
‣ никаких гарантий (“Но это работает на моей
машине”)
18. Vagrant
Синхронизация каталогов между гостевой и родной ОС
Vagrant.configure("2") do |config|
...
config.vm.synced_folder "~/projects", "/projects"
end
19. Vagrant
Настройка сети
Vagrant.configure("2") do |config|
...
config.vm.network :private_network, ip: "10.11.12.13"
config.vm.network :forwarded_port, guest: 8080, host: 8080
end
прокидываем портыстатический ip
20. Что получаем?
‣ легкость создания и настройки
‣ изоляция (на каждый проект свой бокс)
‣ отделение среды разработки от ОС
21. ‣ система менеджмента конфигурации (SCM)
‣ воплощение принципа “Инфраструктура как
код”
или как управлять тысячей серверов
22. Chef cookbook
‣ набор действий по установке, настройке и
запуску какого-то определенного
программного пакета
‣ обычно кроссплатформенные
‣ состоит из одного или нескольких рецептов
(recipes)
‣ коллекция от Opscode https://github.com/
opscode-cookbooks
27. Что получаем?
‣ совпадает с продакшеном (можно и нужно
использовать те же инструменты на
продакшене)
‣ переносимость
28. Переносимость
‣ вы можете скопировать файлы (или лучше
разместить их в git репозитории)
‣ вы можете упаковать существующий бокс
Способы распространения
$ vagrant package --output=/tmp/demo.box
40. Примеры боксов для
разработки
‣ Personal https://github.com/aderyabin/
vagrantfiles
‣ Gitlab https://github.com/gitlabhq/gitlab-vagrant-
vm
‣ Rails https://github.com/rails/rails-dev-box
‣ PHP https://github.com/dirkaholic/vagrant-php-
dev-box
41. Полезные настройки
Используем NFS для синхронизации каталогов
Vagrant.configure("2") do |config|
...
config.vm.synced_folder "~/projects", "/projects", :nfs => true
end
стандартный механизм медленный, так
что используем NFS
44. В итоге
+ единое окружение у всех разработчиков/
тестировщиков и в продакшене
★ окружение легко создать и настроить
★ окружение изолировано
★ окружение легко скопировать/перенести
+ меньше время входа нового человека в проект
+ быстрая адаптация к новым требованиям