SlideShare ist ein Scribd-Unternehmen logo
1 von 40
Downloaden Sie, um offline zu lesen
Как Vagrant и
Chef ускорили
разработку в
несколько раз
Тимур Батыршин
Cinarra Systems
Обо мне
Инженер по эксплуатации в
Cinarra Systems
• Тимур Батыршин
• timur@cinarra.com
• @erthad
Cinarra Systems
• Молодая международная
компания
• Строим платформу для
мобильной рекламы
Ситуация год назад
• Инфраструктурой еще
никто не занимается
• Более 10 сильносвязанных
компонентов приложения
• Много конфигов
• Тесты зависят от данных
Проблемы
• Долгий деплой
• Сложность конфигурации
• Создание окружений
• Синхронизация тестовых
окружений
• Воспроизводимость
Chef
http://chef.io
Шаблоны Chef
• Плохо работают для часто
меняющихся конфигов
• Много лишней работы
для большого числа
параметров
Augeas
http://augeas.net
Augeas
$	
  cat	
  /etc/nginx/nginx.conf	
  
user	
  www-­‐data;	
  
worker_processes	
  4;	
  
events	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  multi_accept	
  on;	
  
}	
  
http	
  {	
  
	
   sendfile	
  on;	
  
	
   tcp_nopush	
  on;	
  
	
   tcp_nodelay	
  on;	
  
	
  	
  	
  	
  	
  	
  	
  	
  gzip	
  on;	
  
}
Augeas
$	
  augtool	
  print	
  /files/etc/nginx/nginx.conf	
  
/files/etc/nginx/nginx.conf	
  
/files/etc/nginx/nginx.conf/user	
  =	
  "www-­‐data"	
  
/files/etc/nginx/nginx.conf/worker_processes	
  =	
  "4"	
  
/files/etc/nginx/nginx.conf/events	
  
/files/etc/nginx/nginx.conf/events/multi_accept	
  =	
  "on"	
  
/files/etc/nginx/nginx.conf/http	
  
/files/etc/nginx/nginx.conf/http/sendfile	
  =	
  "on"	
  
/files/etc/nginx/nginx.conf/http/tcp_nopush	
  =	
  "on"	
  
/files/etc/nginx/nginx.conf/http/tcp_nodelay	
  =	
  "on"	
  
/files/etc/nginx/nginx.conf/http/gzip	
  =	
  "on"	
  
Augeas (ресурс Chef)
augeas_template	
  "/etc/cinarra/cate/cate.conf"	
  do	
  
	
  	
  template	
  "/etc/cinarra/cate/cate.conf.sample"	
  
	
  	
  lens	
  "IniFile"	
  
	
  	
  parameters(	
  
	
  	
  	
  	
  "CATE/logging_lev"	
  =>	
  node.cate.log_level,	
  
	
  	
  	
  	
  "CATE/cmgw_host"	
  =>	
  node.cate.cmgw_host,	
  
	
  	
  	
  	
  "CATE/csync_host"	
  =>	
  node.cate.csync_host,	
  
	
  	
  	
  	
  "CATE/csync_port"	
  =>	
  node.cate.csync_port	
  
	
  	
  )	
  
	
  	
  notifies	
  :run,	
  "execute[supervisorctl	
  restart	
  cate]"	
  
end	
  
Augeas
$	
  cat	
  /etc/cinarra/cate/cate.conf.sample	
  
[CATE]	
  
instance_id	
  =	
  1	
  
logging_lev	
  =	
  6	
  
cate_thread_n	
  =	
  2	
  
cmgw_host	
  =	
  127.0.0.1	
  
cmgw_num	
  =	
  2	
  
csync_enabled	
  =	
  true	
  
csync_host	
  =	
  127.0.0.1	
  
csync_port	
  =	
  1234	
  
Augeas
$	
  cat	
  /etc/cinarra/cate/cate.conf	
  
[CATE]	
  
instance_id	
  =	
  1	
  
logging_lev	
  =	
  3	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  #	
  cate.log_level	
  =	
  3	
  
cate_thread_n	
  =	
  2	
  
cmgw_host	
  =	
  10.0.0.2	
  	
  	
  	
  	
  	
  #	
  cate.cmgw_host	
  =	
  10.0.0.2	
  
cmgw_num	
  =	
  2	
  
csync_enabled	
  =	
  true	
  
csync_host	
  =	
  10.0.0.3	
  	
  	
  	
  	
  #	
  cate.csync_host	
  =	
  10.0.0.3	
  
csync_port	
  =	
  1234	
  	
  	
  	
  	
  	
  	
  	
  	
  #	
  cate.csync_port	
  =	
  nil	
  
Плюсы Augeas
• Всеми конфигами
управляем единообразно
• Поддерживает почти все
форматы конфигов
• Строгий — встроенная
валидация синтаксиса
• Можно расширять
Минусы Augeas
• Расширять сложно
• Плохо работает с
нестрогими форматами
• Форматов обычно мало —
теряет смысл
Vagrant
http://vagrantup.com
Образ сервера
• Jenkins ежедневно
собирает AMI при
помощи Packer
• Публикует Vagrant box в
нашем репозитории
Vagrant
Vagrant box
• Packer создает его, если
указан постпроцессор
• Кладем файл .box на
локальный HTTP
• Обновляем JSON с
информацией о версиях
Vagrant box
$	
  cat	
  ~/.vagrant.d/boxes/cinarra-­‐VAGRANTSLASH-­‐baseami-­‐
daily-­‐1.2/1.0.174/aws/Vagrantfile	
  
Vagrant.configure("2")	
  do	
  |config|	
  
	
  	
  config.vm.provider	
  "aws"	
  do	
  |aws|	
  
	
  	
  	
  	
  aws.region_config	
  "eu-­‐west-­‐1",	
  ami:	
  "ami-­‐fb384f8c"	
  
	
  	
  end	
  
end	
  
vagrant box update
Vagrant ищет JSON на
http://vagrantcloud.com/box_name	
  
ubuntu/precise64	
  ⟶	
  	
  
http://vagrantcloud.com/ubuntu/
precise64	
  
Vagrant box
{	
  "name":	
  "orgname/baseami",	
  
	
  	
  "description":	
  "Our	
  brand	
  new	
  vagrant	
  box",	
  
	
  	
  "versions":	
  [	
  
	
  	
  	
  	
  {	
  "version":	
  "1.0.1",	
  
	
  	
  	
  	
  	
  	
  "providers":	
  [	
  
	
  	
  	
  	
  	
  	
  	
  	
  {	
  "name":	
  "aws",	
  "url":	
  "http://
www.example.com/boxes/orgname/baseami/1.0.1/
packer_amazon-­‐ebs_aws.box"	
  }]},	
  
	
  	
  	
  	
  {	
  "version":	
  "1.0.2",	
  
	
  	
  	
  	
  	
  	
  "providers":	
  [	
  
	
  	
  	
  	
  	
  	
  	
  	
  {	
  "name":	
  "aws",	
  "url":	
  "http://
www.example.com/boxes/orgname/baseami/1.0.2/
packer_amazon-­‐ebs_aws.box"	
  }]}	
  
]}
Vagrant box
• Переопределяем
VAGRANT_SERVER_URL
• Сервер должен отдавать
тип “application/json”
Разработчику
#	
  Делается	
  один	
  раз	
  при	
  добавлении	
  box-­‐а	
  
export	
  	
  
	
  	
  VAGRANT_SERVER_URL="http://www.example.com/boxes"	
  
vagrant	
  box	
  add	
  orgname/baseami	
  
#	
  Перед	
  работой	
  каждый	
  день	
  
vagrant	
  box	
  update	
  
vagrant	
  up	
  
#	
  После	
  работы	
  
vagrant	
  destroy
Jenkins
http://jenkins-ci.org
Jenkins job
Проблемы
• Параметры разбросаны
по всей конфигурации
• Кнопка “Advanced”
• Сложно менять сразу
несколько сборок
• Работать в UI медленно
Jenkins job
Сборка без checkout
Сборка без checkout
В остальном — обычная
сборка
Jenkins job
Центральная сборка
Центральная сборка
• Задает дополнительные
параметры
• Checkout всех git repo
• Запускает сборки с
нужными параметрами
• Достает и публикует
тесты и артефакты
Jenkins job
Вызов сборки
Другие варианты
• Правка config.xml
• Jenkins API
• Workflow plugin

https://wiki.jenkins-ci.org/display/JENKINS/Workflow+Plugin
• Build Flow plugin

https://wiki.jenkins-ci.org/display/JENKINS/Build+Flow+Plugin
• Job DSL plugin

https://wiki.jenkins-ci.org/display/JENKINS/Job+DSL+Plugin
Workflow plugin
echo	
  "Building	
  in	
  ${env.BASEDIR}"	
  
parallel	
  cnrMain:	
  {	
  
	
  	
  echo	
  "Building	
  cnr-­‐main"	
  
	
  	
  dir("cnr-­‐main")	
  {	
  
	
  	
  	
  	
  gitCheckout(	
  
	
  	
  	
  	
  	
  	
  "https://github.com/cinarra/cnr-­‐main.git",	
  
	
  	
  	
  	
  	
  	
  "remotes/origin/${CNR_BRANCH}",	
  
	
  	
  	
  	
  	
  	
  CNR_CREDENTIALS,	
  CNR_BUILD_TAG	
  
	
  	
  	
  	
  )	
  
	
  	
  	
  	
  sh	
  "make	
  clean	
  deb"	
  
	
  	
  	
  	
  archive	
  includes:	
  "**/*.deb",	
  fingerprint:	
  true	
  
	
  	
  }	
  
},	
  cnrCWS:	
  {	
  
	
  	
  	
  	
  	
  	
  echo	
  "Building	
  cnr-­‐cws"	
  
	
  	
  	
  	
  	
  	
  .	
  .	
  .	
  .	
  .	
  .	
  .	
  .	
  .	
  .	
  .	
  
}
Workflow plugin
Плюсы:
• Храним в Git
• Меняем все сборки сразу
• Легче читать и
отслеживать логику
Workflow plugin
Минусы:
• Пока сыроват
• Не совместим со многими
плагинами
Общий план
Github deb AMI
Devs
Tests
Prod
Preprod
Staging Chef
Vagrant
Спасибо!
Мы ищем программистов
Тимур Батыршин:
• timur@cinarra.com
• @erthad
• http://slideshare.net/erthad

Weitere ähnliche Inhalte

Was ist angesagt?

Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)
Ontico
 
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Ontico
 
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Ontico
 
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Ontico
 
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Ontico
 
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Ontico
 
Prometheus мониторинг микросервисных приложений / Виталий Левченко
Prometheus мониторинг микросервисных приложений / Виталий ЛевченкоPrometheus мониторинг микросервисных приложений / Виталий Левченко
Prometheus мониторинг микросервисных приложений / Виталий Левченко
Ontico
 

Was ist angesagt? (19)

Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)
 
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
 
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
 
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
 
Опыт построения СХД на базе Windows Server для использования в публичном обла...
Опыт построения СХД на базе Windows Server для использования в публичном обла...Опыт построения СХД на базе Windows Server для использования в публичном обла...
Опыт построения СХД на базе Windows Server для использования в публичном обла...
 
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
 
Continuousdelivery
ContinuousdeliveryContinuousdelivery
Continuousdelivery
 
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
 
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
 
Yet Another PaaS
Yet Another PaaSYet Another PaaS
Yet Another PaaS
 
«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр Колесень«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр Колесень
 
Крыша 2.0
Крыша 2.0Крыша 2.0
Крыша 2.0
 
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
 
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
 
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
 Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт... Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
 
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
 
Prometheus мониторинг микросервисных приложений / Виталий Левченко
Prometheus мониторинг микросервисных приложений / Виталий ЛевченкоPrometheus мониторинг микросервисных приложений / Виталий Левченко
Prometheus мониторинг микросервисных приложений / Виталий Левченко
 
WebdriverIO + Puppeteer. Double gun – double fun
WebdriverIO + Puppeteer. Double gun – double funWebdriverIO + Puppeteer. Double gun – double fun
WebdriverIO + Puppeteer. Double gun – double fun
 

Ähnlich wie RootConf 2015: Как Vagrant и Chef ускорили разработку в несколько раз

Building deployment pipeline - DevOps way
Building deployment pipeline - DevOps wayBuilding deployment pipeline - DevOps way
Building deployment pipeline - DevOps way
Andrey Rebrov
 
Инженерный дзен. Непрерывные изменения (Александр Титов)
Инженерный дзен. Непрерывные изменения (Александр Титов)Инженерный дзен. Непрерывные изменения (Александр Титов)
Инженерный дзен. Непрерывные изменения (Александр Титов)
Ontico
 
CodeFest 2012. Титов А. — Инженерный дзен. Непрерывные изменения
CodeFest 2012. Титов А. — Инженерный дзен. Непрерывные измененияCodeFest 2012. Титов А. — Инженерный дзен. Непрерывные изменения
CodeFest 2012. Титов А. — Инженерный дзен. Непрерывные изменения
CodeFest
 
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
dddpaul
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на Groovy
Regn
 
Антон Каляев — Быстрое развертывание среды с Vagrant
Антон Каляев — Быстрое развертывание среды с VagrantАнтон Каляев — Быстрое развертывание среды с Vagrant
Антон Каляев — Быстрое развертывание среды с Vagrant
Daria Oreshkina
 
Vagrant: плагины и гастрономический фестиваль
Vagrant: плагины и гастрономический фестивальVagrant: плагины и гастрономический фестиваль
Vagrant: плагины и гастрономический фестиваль
Nikita Borzykh
 
"Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно..."Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно...
it-people
 
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...
Ontico
 
Виртуализация как инструмент разработчика
Виртуализация как инструмент разработчикаВиртуализация как инструмент разработчика
Виртуализация как инструмент разработчика
Alexander Kirillov
 

Ähnlich wie RootConf 2015: Как Vagrant и Chef ускорили разработку в несколько раз (20)

Building deployment pipeline - DevOps way
Building deployment pipeline - DevOps wayBuilding deployment pipeline - DevOps way
Building deployment pipeline - DevOps way
 
Zero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And Forge
 
Инженерный дзен. Непрерывные изменения (Александр Титов)
Инженерный дзен. Непрерывные изменения (Александр Титов)Инженерный дзен. Непрерывные изменения (Александр Титов)
Инженерный дзен. Непрерывные изменения (Александр Титов)
 
CodeFest 2012. Титов А. — Инженерный дзен. Непрерывные изменения
CodeFest 2012. Титов А. — Инженерный дзен. Непрерывные измененияCodeFest 2012. Титов А. — Инженерный дзен. Непрерывные изменения
CodeFest 2012. Титов А. — Инженерный дзен. Непрерывные изменения
 
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
 
Как мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerКак мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows Docker
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
 
Jiramania презентации @augspb
Jiramania презентации   @augspbJiramania презентации   @augspb
Jiramania презентации @augspb
 
Приемы Сontinuous Integration при разработке приложений на Caché
Приемы Сontinuous Integration при разработке приложений на CachéПриемы Сontinuous Integration при разработке приложений на Caché
Приемы Сontinuous Integration при разработке приложений на Caché
 
Caché github continuous intergration
Caché github continuous intergrationCaché github continuous intergration
Caché github continuous intergration
 
Непрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в ЯндексеНепрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в Яндексе
 
Кирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектовКирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектов
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на Groovy
 
Антон Каляев — Быстрое развертывание среды с Vagrant
Антон Каляев — Быстрое развертывание среды с VagrantАнтон Каляев — Быстрое развертывание среды с Vagrant
Антон Каляев — Быстрое развертывание среды с Vagrant
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
 
Vagrant: плагины и гастрономический фестиваль
Vagrant: плагины и гастрономический фестивальVagrant: плагины и гастрономический фестиваль
Vagrant: плагины и гастрономический фестиваль
 
"Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно..."Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно...
 
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...
 
Виртуализация как инструмент разработчика
Виртуализация как инструмент разработчикаВиртуализация как инструмент разработчика
Виртуализация как инструмент разработчика
 
Виртуализация как инструмент разработчика
Виртуализация как инструмент разработчикаВиртуализация как инструмент разработчика
Виртуализация как инструмент разработчика
 

RootConf 2015: Как Vagrant и Chef ускорили разработку в несколько раз

  • 1. Как Vagrant и Chef ускорили разработку в несколько раз Тимур Батыршин Cinarra Systems
  • 2. Обо мне Инженер по эксплуатации в Cinarra Systems • Тимур Батыршин • timur@cinarra.com • @erthad
  • 3. Cinarra Systems • Молодая международная компания • Строим платформу для мобильной рекламы
  • 4. Ситуация год назад • Инфраструктурой еще никто не занимается • Более 10 сильносвязанных компонентов приложения • Много конфигов • Тесты зависят от данных
  • 5. Проблемы • Долгий деплой • Сложность конфигурации • Создание окружений • Синхронизация тестовых окружений • Воспроизводимость
  • 7. Шаблоны Chef • Плохо работают для часто меняющихся конфигов • Много лишней работы для большого числа параметров
  • 9. Augeas $  cat  /etc/nginx/nginx.conf   user  www-­‐data;   worker_processes  4;   events  {                  multi_accept  on;   }   http  {     sendfile  on;     tcp_nopush  on;     tcp_nodelay  on;                  gzip  on;   }
  • 10. Augeas $  augtool  print  /files/etc/nginx/nginx.conf   /files/etc/nginx/nginx.conf   /files/etc/nginx/nginx.conf/user  =  "www-­‐data"   /files/etc/nginx/nginx.conf/worker_processes  =  "4"   /files/etc/nginx/nginx.conf/events   /files/etc/nginx/nginx.conf/events/multi_accept  =  "on"   /files/etc/nginx/nginx.conf/http   /files/etc/nginx/nginx.conf/http/sendfile  =  "on"   /files/etc/nginx/nginx.conf/http/tcp_nopush  =  "on"   /files/etc/nginx/nginx.conf/http/tcp_nodelay  =  "on"   /files/etc/nginx/nginx.conf/http/gzip  =  "on"  
  • 11. Augeas (ресурс Chef) augeas_template  "/etc/cinarra/cate/cate.conf"  do      template  "/etc/cinarra/cate/cate.conf.sample"      lens  "IniFile"      parameters(          "CATE/logging_lev"  =>  node.cate.log_level,          "CATE/cmgw_host"  =>  node.cate.cmgw_host,          "CATE/csync_host"  =>  node.cate.csync_host,          "CATE/csync_port"  =>  node.cate.csync_port      )      notifies  :run,  "execute[supervisorctl  restart  cate]"   end  
  • 12. Augeas $  cat  /etc/cinarra/cate/cate.conf.sample   [CATE]   instance_id  =  1   logging_lev  =  6   cate_thread_n  =  2   cmgw_host  =  127.0.0.1   cmgw_num  =  2   csync_enabled  =  true   csync_host  =  127.0.0.1   csync_port  =  1234  
  • 13. Augeas $  cat  /etc/cinarra/cate/cate.conf   [CATE]   instance_id  =  1   logging_lev  =  3                      #  cate.log_level  =  3   cate_thread_n  =  2   cmgw_host  =  10.0.0.2            #  cate.cmgw_host  =  10.0.0.2   cmgw_num  =  2   csync_enabled  =  true   csync_host  =  10.0.0.3          #  cate.csync_host  =  10.0.0.3   csync_port  =  1234                  #  cate.csync_port  =  nil  
  • 14. Плюсы Augeas • Всеми конфигами управляем единообразно • Поддерживает почти все форматы конфигов • Строгий — встроенная валидация синтаксиса • Можно расширять
  • 15. Минусы Augeas • Расширять сложно • Плохо работает с нестрогими форматами • Форматов обычно мало — теряет смысл
  • 17. Образ сервера • Jenkins ежедневно собирает AMI при помощи Packer • Публикует Vagrant box в нашем репозитории Vagrant
  • 18. Vagrant box • Packer создает его, если указан постпроцессор • Кладем файл .box на локальный HTTP • Обновляем JSON с информацией о версиях
  • 19. Vagrant box $  cat  ~/.vagrant.d/boxes/cinarra-­‐VAGRANTSLASH-­‐baseami-­‐ daily-­‐1.2/1.0.174/aws/Vagrantfile   Vagrant.configure("2")  do  |config|      config.vm.provider  "aws"  do  |aws|          aws.region_config  "eu-­‐west-­‐1",  ami:  "ami-­‐fb384f8c"      end   end  
  • 20. vagrant box update Vagrant ищет JSON на http://vagrantcloud.com/box_name   ubuntu/precise64  ⟶     http://vagrantcloud.com/ubuntu/ precise64  
  • 21. Vagrant box {  "name":  "orgname/baseami",      "description":  "Our  brand  new  vagrant  box",      "versions":  [          {  "version":  "1.0.1",              "providers":  [                  {  "name":  "aws",  "url":  "http:// www.example.com/boxes/orgname/baseami/1.0.1/ packer_amazon-­‐ebs_aws.box"  }]},          {  "version":  "1.0.2",              "providers":  [                  {  "name":  "aws",  "url":  "http:// www.example.com/boxes/orgname/baseami/1.0.2/ packer_amazon-­‐ebs_aws.box"  }]}   ]}
  • 22. Vagrant box • Переопределяем VAGRANT_SERVER_URL • Сервер должен отдавать тип “application/json”
  • 23. Разработчику #  Делается  один  раз  при  добавлении  box-­‐а   export        VAGRANT_SERVER_URL="http://www.example.com/boxes"   vagrant  box  add  orgname/baseami   #  Перед  работой  каждый  день   vagrant  box  update   vagrant  up   #  После  работы   vagrant  destroy
  • 26. Проблемы • Параметры разбросаны по всей конфигурации • Кнопка “Advanced” • Сложно менять сразу несколько сборок • Работать в UI медленно
  • 29. Сборка без checkout В остальном — обычная сборка
  • 32. Центральная сборка • Задает дополнительные параметры • Checkout всех git repo • Запускает сборки с нужными параметрами • Достает и публикует тесты и артефакты
  • 35. Другие варианты • Правка config.xml • Jenkins API • Workflow plugin
 https://wiki.jenkins-ci.org/display/JENKINS/Workflow+Plugin • Build Flow plugin
 https://wiki.jenkins-ci.org/display/JENKINS/Build+Flow+Plugin • Job DSL plugin
 https://wiki.jenkins-ci.org/display/JENKINS/Job+DSL+Plugin
  • 36. Workflow plugin echo  "Building  in  ${env.BASEDIR}"   parallel  cnrMain:  {      echo  "Building  cnr-­‐main"      dir("cnr-­‐main")  {          gitCheckout(              "https://github.com/cinarra/cnr-­‐main.git",              "remotes/origin/${CNR_BRANCH}",              CNR_CREDENTIALS,  CNR_BUILD_TAG          )          sh  "make  clean  deb"          archive  includes:  "**/*.deb",  fingerprint:  true      }   },  cnrCWS:  {              echo  "Building  cnr-­‐cws"              .  .  .  .  .  .  .  .  .  .  .   }
  • 37. Workflow plugin Плюсы: • Храним в Git • Меняем все сборки сразу • Легче читать и отслеживать логику
  • 38. Workflow plugin Минусы: • Пока сыроват • Не совместим со многими плагинами
  • 39. Общий план Github deb AMI Devs Tests Prod Preprod Staging Chef Vagrant
  • 40. Спасибо! Мы ищем программистов Тимур Батыршин: • timur@cinarra.com • @erthad • http://slideshare.net/erthad