SlideShare a Scribd company logo
Построение Continuous
Delivery процесса на
примере проекта MOD-PROD
Сборников Андрей
April 4, 2015
2CONFIDENTIAL
MOD-PROD
MOD-PROD – группа проектов покрывающая полный цикл производства
осуществляемого клиентом. Начиная от дизайна продукта, производства и
тестирования до доставки заказчику.
Технологии: Java, JavaScript + HTML 5, PostgreSQL, GIT, Amazon Cloud, Atlassian Jira
Amazon Cloud
App 1
App 2
App N
DB 2DB 1
User
User
3CONFIDENTIAL
У нас было:
• Итерация разработки ~ 4 недели
• 10 проектов с огромным количеством связей
• 12 девелоперов
• 4 разных окружения
• Множество common модулей всех сортов и
расцветок
• (!) Большое количество .sql скриптов
создаваемых разработчиками
MOD-PROD структура
4CONFIDENTIAL
MOD-PROD как было раньше
• 2 недели разрабатываем
• 2 недели тестируем
• Тестирование на различных окружениях
• Отдельный бранч для Test & Fix
W 1 W 5
App1 App2
App3
App
N
Test
&
Fix
W 3
Функциональность разрабатывается
отдельно в каждом приложение
Тестирование интегрированных вместе
приложений
5CONFIDENTIAL
MOD-PROD как было раньше
• Изменения проверяются локально, без
остальных приложений
• БД песочница общая для всех девелоперов
• Jenkins уведомляет об ошибках тестов
• Изменений может быть много, очень много
• Требования могут быть убраны / добавлены во
время итерации
GIT
Jenkins
Dev
Sandbox
Feature 1
Task N
Fail notification
run unit tests
App1
Feature 1
Feature 2
Feature 3
Feature 4
...
...
Feature X
Task N
Feature X
Task A
6CONFIDENTIAL
Проблемы
Разработчики видят только результаты Unit тестов1
Конфликты при изменениях БД (выполнение скриптов не гарантирует
выполнение при развертке)
2
Нет проверки взаимодействия приложений3
Долгое ожидание обратной связи от тестирования / аналитиков4
Нет равномерной загруженности команд5
Возможны изменения требований на этапе тестирования6
Долгий процесс, сложно реагировать на изменения7
7CONFIDENTIAL
Continuous Integration (CI)
1. Включим скрипты БД в
цикл CI
2. Пишем более сложные
тесты на взаимодействие
приложений
Результат: проблемы 1,2,3
выглядят решенными.
Очевидные решения
8CONFIDENTIAL
Continuous Delivery (CD) – непрерывное создание готового к поставке продукта
1. Все пункты из CI
2. Включение интеграционных тестов в процесс релиза
3. Использование системы релизов для БД
4. Изменения фокуса команды разработки – мой следующий коммит может сразу
уйти в релиз
5. Частые автоматические релизы после реализации функциональности / по
расписанию
Результат: проблемы 1,2,3,4,5,6,7 выглядят решенными.
Чуть менее очевидные решения
9CONFIDENTIAL
MOD-PROD как стало
• Нет жесткого разделения цикла разработки и цикла тестирования
• После завершения разработки функциональность идет в релиз
• Интеграционное тестирование часть релиз процесса
• Разработчики проверяют функциональность на спец окружении содержащем
все приложения
• Отдельный бранч для релиза
App
1
App
2
App
3
App
N
Auto-
test-env
run integration
tests
W 1
W 5
W 3
bug
10CONFIDENTIAL
Для приготовления CD нам понадобятся:
• CI сервер: Jenkins (Git plugin, Maven plugin,Git parameter, Delivery Pipeline plugin,
Parameterized Trigger plugin)
• Система хранения артефактов: Nexus
• Репозиторий: Git
• Создание релизов: Maven release plugin
• Версионирование БД: Flyway
• Тестовое окружение: Auto-test srv (App Server + DB)
Построение CD процесса
11CONFIDENTIAL
CD структура глазами разработчика
• Для каждого коммита БД скриптов проводится тестовый апдейт БД
• Последние версии приложений всегда доступны на авто-тест сервере
• Релизим только то, что прошло авто-тесты
• В случае неудачи - уведомления почтой
• Все релизы хранятся в Nexus
• Для каждого релиза создается Git tag
• Для удачных релизов можно создавать release notes
GIT
Jenkins
Feature 1
Task N
Fail notification
run unit tests
Auto-test
DB
test
migration
on
commit
Auto-
test Srv
Deploy & Run
Integration
test
Nexus
create tag
12CONFIDENTIAL
Jenkins Pipeline
1. Выполнение unit тестов
2. Развертка приложений на тестовом сервере (git commit из
п. 1)
3. Выполнение интеграционных тестов
4. Релиз приложения (git commit из п. 1)
5. Релиз БД скриптов этого приложения
13CONFIDENTIAL
1. Настройка Jenkins + GIT на Windows
2. Настройки Jenkins + Maven + Nexus
3. Отсутствие интеграции Nexus -> Jenkins для деплоя
4. Внедрение системы управление БД
5. Нужно высокое тестовое покрытие
6. Изменение фокуса команды
7. Сложный переходный период
Основные трудности
14CONFIDENTIAL
«Полуитеграционные» тесты
1. Тестируется взаимодействие с реальной БД
2. Возможность тестировать бизнес-логику
3. Возможность строить сложные сценарии тестирования
4. Откат транзакций по окончанию теста – нет мусора в бд
 В случае Java EE можно воспользоваться Arquillian или Spring + Java EE
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({ "classpath:test-applicationContext-web.xml", "classpath:test-applicationContext-security.xml", "classpath:test-applicationContext.xml"})
@WebAppConfiguration()
public class ControllerTest {
public static final String REST_API_SEARCH_REQUEST = "/some/address";
public static final String APPLICATION_JSON_CHARSET_UTF_8 = "application/json;charset=UTF-8";
@Autowired
private LotManager lotManager;
@Test
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void testSearch() throws Exception {
//Вызов REST сервиса
ResultActions loadActions = mvc.perform(MockMvcRequestBuilders
.post(REST_API_SEARCH_REQUEST)
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsBytes(Arrays.asList(MyVO.class))))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.content().contentType(APPLICATION_JSON_CHARSET_UTF_8));
loadActions.andDo(MockMvcResultHandlers.print());
//Обработка REST сервиса
List<ResponseInfoVO> loadResponse = objectMapper.readValue(
loadActions.andReturn().getResponse().getContentAsString(),
typeFactory.constructCollectionType(List.class, ResponseInfoVO.class));
}
15CONFIDENTIAL
Проблемы vs Решения
№ Проблемы Решения
1 Разработчики видят только результаты
Unit тестов
Integration tests
2 Конфликты при изменениях БД Версионирование, правила именование,
тестирование БД on commit
3 Нет проверки взаимодействия
приложений
Доп. окружение со всеми приложениями
+ Integration tests
4 Долгое ожидание обратной связи от
тестирования
Быстрые релизы
5 Нет равномерной загруженности команд Нет выделенного этапа тестирования
6 Возможны изменения требований на
этапе тестирования
Нет выделенного этапа тестирования
7 Долгий процесс, сложно реагировать на
изменения
Процесс ориентирован на постоянное
создание готового к поставке продукта
16CONFIDENTIAL
 Высокое покрытие автотестами
 Упрощено создание релизов
 Легче реагировать на изменения в требованиях во время итерации
 Легче делать внезапные «вот очень срочно завтра надо эту штуку»
 Время внедрения процесса ~ 10 чел.-дн. (2 календарных месяца)
Итог
17CONFIDENTIAL
CD !=
P.S.

More Related Content

What's hot

Готовим Docker для Автоматизации Тестирования
Готовим Docker для Автоматизации ТестированияГотовим Docker для Автоматизации Тестирования
Готовим Docker для Автоматизации Тестирования
COMAQA.BY
 
Jenkins 2.0: Организуем тестирование в составе Continuous Delivery
Jenkins 2.0: Организуем тестирование в составе Continuous DeliveryJenkins 2.0: Организуем тестирование в составе Continuous Delivery
Jenkins 2.0: Организуем тестирование в составе Continuous Delivery
SQALab
 
Инструмент ChangelogBuilder для автоматической подготовки Release Notes
Инструмент ChangelogBuilder для автоматической подготовки Release NotesИнструмент ChangelogBuilder для автоматической подготовки Release Notes
Инструмент ChangelogBuilder для автоматической подготовки Release Notes
Positive Hack Days
 
Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения»
Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения»Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения»
Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения»
SpbDotNet Community
 
Организация эффективной работы команды при разработке и поддержке сложной инф...
Организация эффективной работы команды при разработке и поддержке сложной инф...Организация эффективной работы команды при разработке и поддержке сложной инф...
Организация эффективной работы команды при разработке и поддержке сложной инф...
tabtabus
 
Gradle. Новый уровень автоматизации для Android
Gradle. Новый уровень автоматизации для AndroidGradle. Новый уровень автоматизации для Android
Gradle. Новый уровень автоматизации для Android
SQALab
 
Plugin development for intelli j platform
Plugin development for intelli j platformPlugin development for intelli j platform
Plugin development for intelli j platformchashnikov
 
Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"
Fwdays
 
Непрерывная интеграция
Непрерывная интеграцияНепрерывная интеграция
Непрерывная интеграция
QA Dnepropetrovsk Community (Ukraine)
 
Honeywell Industrial Cyber Security Lab & Services Center
Honeywell Industrial Cyber Security Lab & Services CenterHoneywell Industrial Cyber Security Lab & Services Center
Honeywell Industrial Cyber Security Lab & Services Center
Positive Hack Days
 
Highway to Сontinuous Integration, Денис Трифонов (2GIS)
Highway to Сontinuous Integration, Денис Трифонов (2GIS)Highway to Сontinuous Integration, Денис Трифонов (2GIS)
Highway to Сontinuous Integration, Денис Трифонов (2GIS)
Ontico
 
Python tools for web development (Python meetup Almaty #ALAPY)
Python tools for web development (Python meetup Almaty #ALAPY)Python tools for web development (Python meetup Almaty #ALAPY)
Python tools for web development (Python meetup Almaty #ALAPY)
aviatakz
 
"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27
MoscowJS
 
Agile software configuration management
Agile software configuration managementAgile software configuration management
Agile software configuration managementSergii Shmarkatiuk
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.
Igor Shkulipa
 
Инструменты разработки ПО в *nix
Инструменты разработки ПО в *nixИнструменты разработки ПО в *nix
Инструменты разработки ПО в *nix
Alexander Gerasiov
 
Jenkins Imperative Pipeline vs Declarative Pipeline
Jenkins Imperative Pipeline vs Declarative Pipeline Jenkins Imperative Pipeline vs Declarative Pipeline
Jenkins Imperative Pipeline vs Declarative Pipeline
Кирилл Толкачёв
 

What's hot (20)

Непрерывная интеграция (Марина Пестова)
Непрерывная интеграция (Марина Пестова)Непрерывная интеграция (Марина Пестова)
Непрерывная интеграция (Марина Пестова)
 
Готовим Docker для Автоматизации Тестирования
Готовим Docker для Автоматизации ТестированияГотовим Docker для Автоматизации Тестирования
Готовим Docker для Автоматизации Тестирования
 
Jenkins 2.0: Организуем тестирование в составе Continuous Delivery
Jenkins 2.0: Организуем тестирование в составе Continuous DeliveryJenkins 2.0: Организуем тестирование в составе Continuous Delivery
Jenkins 2.0: Организуем тестирование в составе Continuous Delivery
 
Инструмент ChangelogBuilder для автоматической подготовки Release Notes
Инструмент ChangelogBuilder для автоматической подготовки Release NotesИнструмент ChangelogBuilder для автоматической подготовки Release Notes
Инструмент ChangelogBuilder для автоматической подготовки Release Notes
 
Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения»
Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения»Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения»
Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения»
 
Организация эффективной работы команды при разработке и поддержке сложной инф...
Организация эффективной работы команды при разработке и поддержке сложной инф...Организация эффективной работы команды при разработке и поддержке сложной инф...
Организация эффективной работы команды при разработке и поддержке сложной инф...
 
Gradle. Новый уровень автоматизации для Android
Gradle. Новый уровень автоматизации для AndroidGradle. Новый уровень автоматизации для Android
Gradle. Новый уровень автоматизации для Android
 
GitFlow_MOEX
GitFlow_MOEXGitFlow_MOEX
GitFlow_MOEX
 
Plugin development for intelli j platform
Plugin development for intelli j platformPlugin development for intelli j platform
Plugin development for intelli j platform
 
Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"
 
Непрерывная интеграция
Непрерывная интеграцияНепрерывная интеграция
Непрерывная интеграция
 
Honeywell Industrial Cyber Security Lab & Services Center
Honeywell Industrial Cyber Security Lab & Services CenterHoneywell Industrial Cyber Security Lab & Services Center
Honeywell Industrial Cyber Security Lab & Services Center
 
Highway to Сontinuous Integration, Денис Трифонов (2GIS)
Highway to Сontinuous Integration, Денис Трифонов (2GIS)Highway to Сontinuous Integration, Денис Трифонов (2GIS)
Highway to Сontinuous Integration, Денис Трифонов (2GIS)
 
Python tools for web development (Python meetup Almaty #ALAPY)
Python tools for web development (Python meetup Almaty #ALAPY)Python tools for web development (Python meetup Almaty #ALAPY)
Python tools for web development (Python meetup Almaty #ALAPY)
 
"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27
 
Agile software configuration management
Agile software configuration managementAgile software configuration management
Agile software configuration management
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.
 
C#5 What's new?
C#5 What's new?C#5 What's new?
C#5 What's new?
 
Инструменты разработки ПО в *nix
Инструменты разработки ПО в *nixИнструменты разработки ПО в *nix
Инструменты разработки ПО в *nix
 
Jenkins Imperative Pipeline vs Declarative Pipeline
Jenkins Imperative Pipeline vs Declarative Pipeline Jenkins Imperative Pipeline vs Declarative Pipeline
Jenkins Imperative Pipeline vs Declarative Pipeline
 

Viewers also liked

«CI. Jenkins. 2GIS» — Игорь Павлов, 2ГИС
«CI. Jenkins. 2GIS» — Игорь Павлов, 2ГИС «CI. Jenkins. 2GIS» — Игорь Павлов, 2ГИС
«CI. Jenkins. 2GIS» — Игорь Павлов, 2ГИС
DevDay
 
Контроль за стилем кода — Кирилл Борисов
Контроль за стилем кода — Кирилл БорисовКонтроль за стилем кода — Кирилл Борисов
Контроль за стилем кода — Кирилл Борисов
Yandex
 
Григорий Липин: Автоматизация нагрузочного тестирования
Григорий Липин: Автоматизация нагрузочного тестированияГригорий Липин: Автоматизация нагрузочного тестирования
Григорий Липин: Автоматизация нагрузочного тестирования
Yandex
 
Дмитрий Пронин – Python для веба
Дмитрий Пронин – Python для вебаДмитрий Пронин – Python для веба
Дмитрий Пронин – Python для веба
Yandex
 
Openstack Third-Party CI and the review of a few Openstack Infrastructure pro...
Openstack Third-Party CI and the review of a few Openstack Infrastructure pro...Openstack Third-Party CI and the review of a few Openstack Infrastructure pro...
Openstack Third-Party CI and the review of a few Openstack Infrastructure pro...
Evgeny Antyshev
 
jobDSL plugin: настройка jenkins ci скриптом
jobDSL plugin: настройка jenkins ci скриптомjobDSL plugin: настройка jenkins ci скриптом
jobDSL plugin: настройка jenkins ci скриптом
Vasilii Chernov
 
Проблемы производительности open source библиотек
Проблемы производительности open source библиотекПроблемы производительности open source библиотек
Проблемы производительности open source библиотек
Vladimir Sitnikov
 
Непрерывный анализ качества кода с помощью SonarQube
Непрерывный анализ качества кода с помощью SonarQubeНепрерывный анализ качества кода с помощью SonarQube
Непрерывный анализ качества кода с помощью SonarQube
Vasilii Chernov
 
Highload в ВУЗе идеализм, расчётливый менеджмент или пустые надежды / Артем К...
Highload в ВУЗе идеализм, расчётливый менеджмент или пустые надежды / Артем К...Highload в ВУЗе идеализм, расчётливый менеджмент или пустые надежды / Артем К...
Highload в ВУЗе идеализм, расчётливый менеджмент или пустые надежды / Артем К...
Ontico
 
Large Scale Data Analytics with Spark and Cassandra on the DSE Platform
Large Scale Data Analytics with Spark and Cassandra on the DSE PlatformLarge Scale Data Analytics with Spark and Cassandra on the DSE Platform
Large Scale Data Analytics with Spark and Cassandra on the DSE Platform
DataStax Academy
 
Ceph BlueStore - новый тип хранилища в Ceph / Максим Воронцов, (Redsys)
Ceph BlueStore - новый тип хранилища в Ceph / Максим Воронцов, (Redsys)Ceph BlueStore - новый тип хранилища в Ceph / Максим Воронцов, (Redsys)
Ceph BlueStore - новый тип хранилища в Ceph / Максим Воронцов, (Redsys)
Ontico
 
Managing (Schema) Migrations in Cassandra
Managing (Schema) Migrations in CassandraManaging (Schema) Migrations in Cassandra
Managing (Schema) Migrations in Cassandra
DataStax Academy
 
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Ontico
 
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
Ontico
 
Управление проектами в Cactussoft
Управление проектами в CactussoftУправление проектами в Cactussoft
Управление проектами в Cactussoft
Anna Barzakovskaya
 
It meet up 2015 biology bioinformatics
It meet up 2015   biology bioinformaticsIt meet up 2015   biology bioinformatics
It meet up 2015 biology bioinformatics
Victoria Astapenko
 
Как автоматизировать аналитику рекламных кампаний
Как автоматизировать аналитику рекламных кампанийКак автоматизировать аналитику рекламных кампаний
Как автоматизировать аналитику рекламных кампаний
Netpeak
 
Пятницкий М.А. Подбор персонализированной противоопухолевой терапии путем сис...
Пятницкий М.А. Подбор персонализированной противоопухолевой терапии путем сис...Пятницкий М.А. Подбор персонализированной противоопухолевой терапии путем сис...
Пятницкий М.А. Подбор персонализированной противоопухолевой терапии путем сис...bigdatabm
 
Осадчий А.Е. Анализ многомерных магнито- и электроэнцефалографических данных ...
Осадчий А.Е. Анализ многомерных магнито- и электроэнцефалографических данных ...Осадчий А.Е. Анализ многомерных магнито- и электроэнцефалографических данных ...
Осадчий А.Е. Анализ многомерных магнито- и электроэнцефалографических данных ...bigdatabm
 

Viewers also liked (20)

«CI. Jenkins. 2GIS» — Игорь Павлов, 2ГИС
«CI. Jenkins. 2GIS» — Игорь Павлов, 2ГИС «CI. Jenkins. 2GIS» — Игорь Павлов, 2ГИС
«CI. Jenkins. 2GIS» — Игорь Павлов, 2ГИС
 
Контроль за стилем кода — Кирилл Борисов
Контроль за стилем кода — Кирилл БорисовКонтроль за стилем кода — Кирилл Борисов
Контроль за стилем кода — Кирилл Борисов
 
Григорий Липин: Автоматизация нагрузочного тестирования
Григорий Липин: Автоматизация нагрузочного тестированияГригорий Липин: Автоматизация нагрузочного тестирования
Григорий Липин: Автоматизация нагрузочного тестирования
 
Дмитрий Пронин – Python для веба
Дмитрий Пронин – Python для вебаДмитрий Пронин – Python для веба
Дмитрий Пронин – Python для веба
 
Openstack Third-Party CI and the review of a few Openstack Infrastructure pro...
Openstack Third-Party CI and the review of a few Openstack Infrastructure pro...Openstack Third-Party CI and the review of a few Openstack Infrastructure pro...
Openstack Third-Party CI and the review of a few Openstack Infrastructure pro...
 
jobDSL plugin: настройка jenkins ci скриптом
jobDSL plugin: настройка jenkins ci скриптомjobDSL plugin: настройка jenkins ci скриптом
jobDSL plugin: настройка jenkins ci скриптом
 
Проблемы производительности open source библиотек
Проблемы производительности open source библиотекПроблемы производительности open source библиотек
Проблемы производительности open source библиотек
 
Непрерывный анализ качества кода с помощью SonarQube
Непрерывный анализ качества кода с помощью SonarQubeНепрерывный анализ качества кода с помощью SonarQube
Непрерывный анализ качества кода с помощью SonarQube
 
Highload в ВУЗе идеализм, расчётливый менеджмент или пустые надежды / Артем К...
Highload в ВУЗе идеализм, расчётливый менеджмент или пустые надежды / Артем К...Highload в ВУЗе идеализм, расчётливый менеджмент или пустые надежды / Артем К...
Highload в ВУЗе идеализм, расчётливый менеджмент или пустые надежды / Артем К...
 
Large Scale Data Analytics with Spark and Cassandra on the DSE Platform
Large Scale Data Analytics with Spark and Cassandra on the DSE PlatformLarge Scale Data Analytics with Spark and Cassandra on the DSE Platform
Large Scale Data Analytics with Spark and Cassandra on the DSE Platform
 
Ceph BlueStore - новый тип хранилища в Ceph / Максим Воронцов, (Redsys)
Ceph BlueStore - новый тип хранилища в Ceph / Максим Воронцов, (Redsys)Ceph BlueStore - новый тип хранилища в Ceph / Максим Воронцов, (Redsys)
Ceph BlueStore - новый тип хранилища в Ceph / Максим Воронцов, (Redsys)
 
Managing (Schema) Migrations in Cassandra
Managing (Schema) Migrations in CassandraManaging (Schema) Migrations in Cassandra
Managing (Schema) Migrations in Cassandra
 
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
 
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
 
Управление проектами в Cactussoft
Управление проектами в CactussoftУправление проектами в Cactussoft
Управление проектами в Cactussoft
 
It meet up 2015 biology bioinformatics
It meet up 2015   biology bioinformaticsIt meet up 2015   biology bioinformatics
It meet up 2015 biology bioinformatics
 
Как автоматизировать аналитику рекламных кампаний
Как автоматизировать аналитику рекламных кампанийКак автоматизировать аналитику рекламных кампаний
Как автоматизировать аналитику рекламных кампаний
 
Пятницкий М.А. Подбор персонализированной противоопухолевой терапии путем сис...
Пятницкий М.А. Подбор персонализированной противоопухолевой терапии путем сис...Пятницкий М.А. Подбор персонализированной противоопухолевой терапии путем сис...
Пятницкий М.А. Подбор персонализированной противоопухолевой терапии путем сис...
 
Осадчий А.Е. Анализ многомерных магнито- и электроэнцефалографических данных ...
Осадчий А.Е. Анализ многомерных магнито- и электроэнцефалографических данных ...Осадчий А.Е. Анализ многомерных магнито- и электроэнцефалографических данных ...
Осадчий А.Е. Анализ многомерных магнито- и электроэнцефалографических данных ...
 
Nanovision март 2014
Nanovision март 2014Nanovision март 2014
Nanovision март 2014
 

Similar to It meetup cd

SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON
 
DevOps guide for awesome quality assurance
DevOps guide for awesome quality assuranceDevOps guide for awesome quality assurance
DevOps guide for awesome quality assurance
Анастасия Асеева
 
Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)
Кафедра высокопроизводительных компьютерных технологий ИМКН УрФУ
 
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыMoscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Oleg Nenashev
 
«Механизмы обновления платформы и окружений пользователей в Jelastic»
«Механизмы обновления платформы и окружений пользователей в Jelastic»«Механизмы обновления платформы и окружений пользователей в Jelastic»
«Механизмы обновления платформы и окружений пользователей в Jelastic»
Nata_Churda
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчика
Mikhail Chinkov
 
Wgforge CI/CD
Wgforge CI/CDWgforge CI/CD
Непрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в ЯндексеНепрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в Яндексе
Andrey Kazarinov
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
SQALab
 
Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5Technopark
 
Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)
Alexander Babich
 
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
HappyDev
 
Azure DevOps сборка, развертывание и тестирование
Azure DevOps сборка, развертывание и тестированиеAzure DevOps сборка, развертывание и тестирование
Azure DevOps сборка, развертывание и тестирование
Александр Шамрай
 
Python Development process in Yandex
Python Development process in YandexPython Development process in Yandex
Python Development process in Yandex
aviatakz
 
Процессы разработки в Яндексе
Процессы разработки в ЯндексеПроцессы разработки в Яндексе
Процессы разработки в Яндексе
Andrey Kazarinov
 
Модульное тестирование и TDD в .NET
Модульное тестирование и TDD в .NETМодульное тестирование и TDD в .NET
Модульное тестирование и TDD в .NET
Alexander Byndyu
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...
IT-Portfolio
 
Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)
Vladimir Bakhov
 
«трудности при разработке сложных распределённых систем на Java. способы реше...
«трудности при разработке сложных распределённых систем на Java. способы реше...«трудности при разработке сложных распределённых систем на Java. способы реше...
«трудности при разработке сложных распределённых систем на Java. способы реше...MDDay_4
 
Виктор Стрелков - Jabber как инструмент разработчика
Виктор Стрелков - Jabber как инструмент разработчикаВиктор Стрелков - Jabber как инструмент разработчика
Виктор Стрелков - Jabber как инструмент разработчикаPositive Hack Days
 

Similar to It meetup cd (20)

SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
 
DevOps guide for awesome quality assurance
DevOps guide for awesome quality assuranceDevOps guide for awesome quality assurance
DevOps guide for awesome quality assurance
 
Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)
 
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыMoscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
 
«Механизмы обновления платформы и окружений пользователей в Jelastic»
«Механизмы обновления платформы и окружений пользователей в Jelastic»«Механизмы обновления платформы и окружений пользователей в Jelastic»
«Механизмы обновления платформы и окружений пользователей в Jelastic»
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчика
 
Wgforge CI/CD
Wgforge CI/CDWgforge CI/CD
Wgforge CI/CD
 
Непрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в ЯндексеНепрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в Яндексе
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
 
Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5
 
Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)
 
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
 
Azure DevOps сборка, развертывание и тестирование
Azure DevOps сборка, развертывание и тестированиеAzure DevOps сборка, развертывание и тестирование
Azure DevOps сборка, развертывание и тестирование
 
Python Development process in Yandex
Python Development process in YandexPython Development process in Yandex
Python Development process in Yandex
 
Процессы разработки в Яндексе
Процессы разработки в ЯндексеПроцессы разработки в Яндексе
Процессы разработки в Яндексе
 
Модульное тестирование и TDD в .NET
Модульное тестирование и TDD в .NETМодульное тестирование и TDD в .NET
Модульное тестирование и TDD в .NET
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...
 
Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)
 
«трудности при разработке сложных распределённых систем на Java. способы реше...
«трудности при разработке сложных распределённых систем на Java. способы реше...«трудности при разработке сложных распределённых систем на Java. способы реше...
«трудности при разработке сложных распределённых систем на Java. способы реше...
 
Виктор Стрелков - Jabber как инструмент разработчика
Виктор Стрелков - Jabber как инструмент разработчикаВиктор Стрелков - Jabber как инструмент разработчика
Виктор Стрелков - Jabber как инструмент разработчика
 

More from Victoria Astapenko

Word2 vec epam
Word2 vec epamWord2 vec epam
Word2 vec epam
Victoria Astapenko
 
It meet up 1 0 лебедева, лоханов
It meet up 1 0 лебедева, лохановIt meet up 1 0 лебедева, лоханов
It meet up 1 0 лебедева, лоханов
Victoria Astapenko
 
трудные люди
трудные людитрудные люди
трудные люди
Victoria Astapenko
 
Management decisions 20150328
Management decisions 20150328Management decisions 20150328
Management decisions 20150328
Victoria Astapenko
 
Fish.pptx
Fish.pptxFish.pptx
04042015epam satroschenkov
04042015epam satroschenkov04042015epam satroschenkov
04042015epam satroschenkov
Victoria Astapenko
 
Davit mkrtchyan rich wicket presentation
Davit mkrtchyan rich wicket presentationDavit mkrtchyan rich wicket presentation
Davit mkrtchyan rich wicket presentation
Victoria Astapenko
 
Codename one epam
Codename one epamCodename one epam
Codename one epam
Victoria Astapenko
 
Mind map - pravuk
Mind map - pravukMind map - pravuk
Mind map - pravuk
Victoria Astapenko
 

More from Victoria Astapenko (9)

Word2 vec epam
Word2 vec epamWord2 vec epam
Word2 vec epam
 
It meet up 1 0 лебедева, лоханов
It meet up 1 0 лебедева, лохановIt meet up 1 0 лебедева, лоханов
It meet up 1 0 лебедева, лоханов
 
трудные люди
трудные людитрудные люди
трудные люди
 
Management decisions 20150328
Management decisions 20150328Management decisions 20150328
Management decisions 20150328
 
Fish.pptx
Fish.pptxFish.pptx
Fish.pptx
 
04042015epam satroschenkov
04042015epam satroschenkov04042015epam satroschenkov
04042015epam satroschenkov
 
Davit mkrtchyan rich wicket presentation
Davit mkrtchyan rich wicket presentationDavit mkrtchyan rich wicket presentation
Davit mkrtchyan rich wicket presentation
 
Codename one epam
Codename one epamCodename one epam
Codename one epam
 
Mind map - pravuk
Mind map - pravukMind map - pravuk
Mind map - pravuk
 

It meetup cd

  • 1. Построение Continuous Delivery процесса на примере проекта MOD-PROD Сборников Андрей April 4, 2015
  • 2. 2CONFIDENTIAL MOD-PROD MOD-PROD – группа проектов покрывающая полный цикл производства осуществляемого клиентом. Начиная от дизайна продукта, производства и тестирования до доставки заказчику. Технологии: Java, JavaScript + HTML 5, PostgreSQL, GIT, Amazon Cloud, Atlassian Jira Amazon Cloud App 1 App 2 App N DB 2DB 1 User User
  • 3. 3CONFIDENTIAL У нас было: • Итерация разработки ~ 4 недели • 10 проектов с огромным количеством связей • 12 девелоперов • 4 разных окружения • Множество common модулей всех сортов и расцветок • (!) Большое количество .sql скриптов создаваемых разработчиками MOD-PROD структура
  • 4. 4CONFIDENTIAL MOD-PROD как было раньше • 2 недели разрабатываем • 2 недели тестируем • Тестирование на различных окружениях • Отдельный бранч для Test & Fix W 1 W 5 App1 App2 App3 App N Test & Fix W 3 Функциональность разрабатывается отдельно в каждом приложение Тестирование интегрированных вместе приложений
  • 5. 5CONFIDENTIAL MOD-PROD как было раньше • Изменения проверяются локально, без остальных приложений • БД песочница общая для всех девелоперов • Jenkins уведомляет об ошибках тестов • Изменений может быть много, очень много • Требования могут быть убраны / добавлены во время итерации GIT Jenkins Dev Sandbox Feature 1 Task N Fail notification run unit tests App1 Feature 1 Feature 2 Feature 3 Feature 4 ... ... Feature X Task N Feature X Task A
  • 6. 6CONFIDENTIAL Проблемы Разработчики видят только результаты Unit тестов1 Конфликты при изменениях БД (выполнение скриптов не гарантирует выполнение при развертке) 2 Нет проверки взаимодействия приложений3 Долгое ожидание обратной связи от тестирования / аналитиков4 Нет равномерной загруженности команд5 Возможны изменения требований на этапе тестирования6 Долгий процесс, сложно реагировать на изменения7
  • 7. 7CONFIDENTIAL Continuous Integration (CI) 1. Включим скрипты БД в цикл CI 2. Пишем более сложные тесты на взаимодействие приложений Результат: проблемы 1,2,3 выглядят решенными. Очевидные решения
  • 8. 8CONFIDENTIAL Continuous Delivery (CD) – непрерывное создание готового к поставке продукта 1. Все пункты из CI 2. Включение интеграционных тестов в процесс релиза 3. Использование системы релизов для БД 4. Изменения фокуса команды разработки – мой следующий коммит может сразу уйти в релиз 5. Частые автоматические релизы после реализации функциональности / по расписанию Результат: проблемы 1,2,3,4,5,6,7 выглядят решенными. Чуть менее очевидные решения
  • 9. 9CONFIDENTIAL MOD-PROD как стало • Нет жесткого разделения цикла разработки и цикла тестирования • После завершения разработки функциональность идет в релиз • Интеграционное тестирование часть релиз процесса • Разработчики проверяют функциональность на спец окружении содержащем все приложения • Отдельный бранч для релиза App 1 App 2 App 3 App N Auto- test-env run integration tests W 1 W 5 W 3 bug
  • 10. 10CONFIDENTIAL Для приготовления CD нам понадобятся: • CI сервер: Jenkins (Git plugin, Maven plugin,Git parameter, Delivery Pipeline plugin, Parameterized Trigger plugin) • Система хранения артефактов: Nexus • Репозиторий: Git • Создание релизов: Maven release plugin • Версионирование БД: Flyway • Тестовое окружение: Auto-test srv (App Server + DB) Построение CD процесса
  • 11. 11CONFIDENTIAL CD структура глазами разработчика • Для каждого коммита БД скриптов проводится тестовый апдейт БД • Последние версии приложений всегда доступны на авто-тест сервере • Релизим только то, что прошло авто-тесты • В случае неудачи - уведомления почтой • Все релизы хранятся в Nexus • Для каждого релиза создается Git tag • Для удачных релизов можно создавать release notes GIT Jenkins Feature 1 Task N Fail notification run unit tests Auto-test DB test migration on commit Auto- test Srv Deploy & Run Integration test Nexus create tag
  • 12. 12CONFIDENTIAL Jenkins Pipeline 1. Выполнение unit тестов 2. Развертка приложений на тестовом сервере (git commit из п. 1) 3. Выполнение интеграционных тестов 4. Релиз приложения (git commit из п. 1) 5. Релиз БД скриптов этого приложения
  • 13. 13CONFIDENTIAL 1. Настройка Jenkins + GIT на Windows 2. Настройки Jenkins + Maven + Nexus 3. Отсутствие интеграции Nexus -> Jenkins для деплоя 4. Внедрение системы управление БД 5. Нужно высокое тестовое покрытие 6. Изменение фокуса команды 7. Сложный переходный период Основные трудности
  • 14. 14CONFIDENTIAL «Полуитеграционные» тесты 1. Тестируется взаимодействие с реальной БД 2. Возможность тестировать бизнес-логику 3. Возможность строить сложные сценарии тестирования 4. Откат транзакций по окончанию теста – нет мусора в бд  В случае Java EE можно воспользоваться Arquillian или Spring + Java EE @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration({ "classpath:test-applicationContext-web.xml", "classpath:test-applicationContext-security.xml", "classpath:test-applicationContext.xml"}) @WebAppConfiguration() public class ControllerTest { public static final String REST_API_SEARCH_REQUEST = "/some/address"; public static final String APPLICATION_JSON_CHARSET_UTF_8 = "application/json;charset=UTF-8"; @Autowired private LotManager lotManager; @Test @Transactional(propagation = Propagation.REQUIRES_NEW) public void testSearch() throws Exception { //Вызов REST сервиса ResultActions loadActions = mvc.perform(MockMvcRequestBuilders .post(REST_API_SEARCH_REQUEST) .contentType(MediaType.APPLICATION_JSON) .content(objectMapper.writeValueAsBytes(Arrays.asList(MyVO.class)))) .andExpect(MockMvcResultMatchers.status().isOk()) .andExpect(MockMvcResultMatchers.content().contentType(APPLICATION_JSON_CHARSET_UTF_8)); loadActions.andDo(MockMvcResultHandlers.print()); //Обработка REST сервиса List<ResponseInfoVO> loadResponse = objectMapper.readValue( loadActions.andReturn().getResponse().getContentAsString(), typeFactory.constructCollectionType(List.class, ResponseInfoVO.class)); }
  • 15. 15CONFIDENTIAL Проблемы vs Решения № Проблемы Решения 1 Разработчики видят только результаты Unit тестов Integration tests 2 Конфликты при изменениях БД Версионирование, правила именование, тестирование БД on commit 3 Нет проверки взаимодействия приложений Доп. окружение со всеми приложениями + Integration tests 4 Долгое ожидание обратной связи от тестирования Быстрые релизы 5 Нет равномерной загруженности команд Нет выделенного этапа тестирования 6 Возможны изменения требований на этапе тестирования Нет выделенного этапа тестирования 7 Долгий процесс, сложно реагировать на изменения Процесс ориентирован на постоянное создание готового к поставке продукта
  • 16. 16CONFIDENTIAL  Высокое покрытие автотестами  Упрощено создание релизов  Легче реагировать на изменения в требованиях во время итерации  Легче делать внезапные «вот очень срочно завтра надо эту штуку»  Время внедрения процесса ~ 10 чел.-дн. (2 календарных месяца) Итог