ݺߣ

ݺߣShare a Scribd company logo
Github Flow. Немного 
сложнее, чем на бумаге 
Александр Бирюков, Руководитель группы разработки ПО, 2GIS
Александр Бирюков 
Руководитель группы разработки ПО 
Куратор секции FrontEnd 
Люблю JavaScript 
2
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
GitHub Flow
6 принципов GitHub Flow 
1. master всегда в рабочем состоянии и готов к деплою 
2. Каждая новая ветвь создаётся от master и имеет понятное название 
3. Постоянно актуализируйте удалённую ветвь и локальную 
4. В любой момент времени создавайте Pull Request 
5. Вливайте ветвь только после того как кто-то просмотрел изменения 
6. Как только изменения попали в master их следует задеплоить 
8
6 принципов GitHub Flow 
1. master всегда в рабочем состоянии и готов к деплою 
2. Каждая новая ветвь создаётся от master и имеет понятное название 
3. Постоянно актуализируйте удалённую ветвь и локальную 
4. В любой момент времени создавайте Pull Request 
5. Вливайте ветвь только после того как кто-то просмотрел изменения 
6. Как только изменения попали в master их следует задеплоить 
9
#4 и #5 — Pull Request merge master 
• Большая команда — генерирует много PR 
• Подвисший PR быстро устаревает (1,5 мес) 
• Две системы трекинга — Github и ваша внутренняя 
• Достаточно ли ревью чтобы слить задачу в master? 
10
#4 и #5 — Что пришлось сделать 
• Оповещаем о самых срочных PR 
• Утром и после обеда каждый выделяет время на ревью 
• Ревью минимум от 2-х членов команды 
• Подружили JIRA и Github 
• В JIRA держим задачи и ориентируемся на все статусы 
• В Github ведём только CodeReview 
• Написали расширение к Chrome для отображения статуса PR 
11
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
6 принципов GitHub Flow 
13 
1. master всегда в рабочем состоянии и готов к деплою 
2. Каждая новая ветвь создаётся от master и имеет понятное название 
3. Постоянно актуализируйте удалённую ветвь и локальную 
4. В любой момент времени создавайте Pull Request 
5. Вливайте ветвь только после того как кто-то просмотрел изменения 
6. Как только изменения попали в master их следует задеплоить
#2 и #3 — Разработка в ветках 
• Актуализируем локальную ветку — merge vs. rebase 
• Актуализируем удалённу ветку — force push после rebase 
Нужно хорошо знать и уметь пользоваться git 
14
#2 и #3 — Что пришлось сделать 
1. Принять ряд соглашений по работе с ветками 
• Именование веток 
• Описать жизненный цикл 
• Нет множественному ветвлению 
2. Провести 2 внутренних семинара по использованию git 
15
6 принципов GitHub Flow 
16 
1. master всегда в рабочем состоянии и готов к деплою 
2. Каждая новая ветвь создаётся от master и имеет понятное название 
3. Постоянно актуализируйте удалённую ветвь и локальную 
4. В любой момент времени создавайте Pull Request 
5. Вливайте ветвь только после того как кто-то просмотрел изменения 
6. Как только изменения попали в master их следует задеплоить
#1 и #6 — Деплоить!!1 
• Готов к деплою — протестирован 
• В порядке поступления — быстро 
17
#1 и #6 — Деплоить!!1 
Тестируется быстро 
• Есть богатый набор тестов всех уровней 
• Jenkins или любая другая система 
Выкатывается быстро 
• Есть система автоматической сборки проекта 
• Ansible, Chef или любая другая система 
18
#1 и #6 — Что пришлось сделать 
19 
• Дополнить базу тестов почти на 50% — ~3 недели работы 
• Группы тестов для каждого этапа 
• Настроить Jenkins на организацию автоматических сборок и прогона 
финального набора тестов 
• Процесс и инфраструктура для выкладки проекта
Итого, нам пришлось сделать 
20 
• В срочном порядке дописывать недостающие автотесты 
• Полностью перенастроить систему автоматизированного 
тестирования (CI) 
• По максимуму автоматизировать и отладить процесс доставки кода на 
бой (CD) 
• Принять несколько дополнительных командных соглашений 
• Написать расширение для браузера для синхронизации Jira+Gihub 
• Провести несколько тренингов/презентаций по Git
Каких результатов достигли 
• На проекте есть честный CodeReview 
• Более 1000 F-тестов которые реально помогают 
• Пул из ~10-15 PR 
• 5-7 на ревью 
• 5-7 готовы к тестированию 
• Самый старый PR - 8-12 дней 
• 1 QA в день интегрирует 2-4 PR. Т.е 4-12 PR/день 
• Последняя ретроспектива - GithubFlow круто! 
21
GitHub Flow — это 
действительно 
круто!
Спасибо! Вопросы? 
Александр Бирюков 
a.biryukov@2gis.ru 
@illbullet 
http://2gis.ru, http://beta.2gis.ru
Git Flow 
The primary reason for moving away is that the git-flow process is hard to 
deal with in a continuous (or near-continuous) deployment model. 
Nicholas C. Zakas 
The general feeling is that git-flow works well for products in a more 
traditional release model, where releases are done once every few weeks.... 
Nicholas C. Zakas 
““ 
24
Команда профессионалов 
• 1 Project Manager 
• 1 Team Lead 
• 9 JS Developers 
• 4 FE Developers 
• 3 QA 
25

More Related Content

What's hot (16)

Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Ontico
Мифы о DevOps / Александр Титов, Иван Евтухович (Экспресс 42)
Мифы о DevOps / Александр Титов, Иван Евтухович (Экспресс 42)Мифы о DevOps / Александр Титов, Иван Евтухович (Экспресс 42)
Мифы о DevOps / Александр Титов, Иван Евтухович (Экспресс 42)
Ontico
Monitoring base, golang meetup, kyiv
Monitoring base, golang meetup, kyivMonitoring base, golang meetup, kyiv
Monitoring base, golang meetup, kyiv
Vsevolod Polyakov
Как мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerКак мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows Docker
Positive Hack Days
Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»
WrikeTechClub
Лучшие практики CI/CD с Kubernetes и GitLab / Дмитрий Столяров (Флант)
Лучшие практики CI/CD с Kubernetes и GitLab / Дмитрий Столяров (Флант)Лучшие практики CI/CD с Kubernetes и GitLab / Дмитрий Столяров (Флант)
Лучшие практики CI/CD с Kubernetes и GitLab / Дмитрий Столяров (Флант)
Ontico
Инструмент ChangelogBuilder для автоматической подготовки Release Notes
Инструмент ChangelogBuilder для автоматической подготовки Release NotesИнструмент ChangelogBuilder для автоматической подготовки Release Notes
Инструмент ChangelogBuilder для автоматической подготовки Release Notes
Positive Hack Days
Devconf-2015 Тестируем инфраструктуру как код
Devconf-2015 Тестируем инфраструктуру как кодDevconf-2015 Тестируем инфраструктуру как код
Devconf-2015 Тестируем инфраструктуру как код
Igor Kurochkin
Как подружить команду админов с N командами разработки / Денис Яковлев (2ГИС)
Как подружить команду админов с N командами разработки / Денис Яковлев (2ГИС)Как подружить команду админов с N командами разработки / Денис Яковлев (2ГИС)
Как подружить команду админов с N командами разработки / Денис Яковлев (2ГИС)
Ontico
Codeception + Docker + Robo и что из этого вышло
Codeception + Docker + Robo и что из этого вышлоCodeception + Docker + Robo и что из этого вышло
Codeception + Docker + Robo и что из этого вышло
COMAQA.BY
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...
it-people
Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac
Константин Назаров – Распараллеливание сборки Parallels Desktop для MacКонстантин Назаров – Распараллеливание сборки Parallels Desktop для Mac
Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac
404fest
CI для тестировщиков или как отказаться от релизов
CI для тестировщиков или как отказаться от релизовCI для тестировщиков или как отказаться от релизов
CI для тестировщиков или как отказаться от релизов
SQALab
Типовая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive TechnologiesТиповая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive Technologies
Positive Hack Days
Workflows в Express 42
Workflows в Express 42Workflows в Express 42
Workflows в Express 42
Igor Kurochkin
Jenkins 2.0: Организуем тестирование в составе Continuous Delivery
Jenkins 2.0: Организуем тестирование в составе Continuous DeliveryJenkins 2.0: Организуем тестирование в составе Continuous Delivery
Jenkins 2.0: Организуем тестирование в составе Continuous Delivery
SQALab
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Ontico
Мифы о DevOps / Александр Титов, Иван Евтухович (Экспресс 42)
Мифы о DevOps / Александр Титов, Иван Евтухович (Экспресс 42)Мифы о DevOps / Александр Титов, Иван Евтухович (Экспресс 42)
Мифы о DevOps / Александр Титов, Иван Евтухович (Экспресс 42)
Ontico
Monitoring base, golang meetup, kyiv
Monitoring base, golang meetup, kyivMonitoring base, golang meetup, kyiv
Monitoring base, golang meetup, kyiv
Vsevolod Polyakov
Как мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerКак мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows Docker
Positive Hack Days
Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»
WrikeTechClub
Лучшие практики CI/CD с Kubernetes и GitLab / Дмитрий Столяров (Флант)
Лучшие практики CI/CD с Kubernetes и GitLab / Дмитрий Столяров (Флант)Лучшие практики CI/CD с Kubernetes и GitLab / Дмитрий Столяров (Флант)
Лучшие практики CI/CD с Kubernetes и GitLab / Дмитрий Столяров (Флант)
Ontico
Инструмент ChangelogBuilder для автоматической подготовки Release Notes
Инструмент ChangelogBuilder для автоматической подготовки Release NotesИнструмент ChangelogBuilder для автоматической подготовки Release Notes
Инструмент ChangelogBuilder для автоматической подготовки Release Notes
Positive Hack Days
Devconf-2015 Тестируем инфраструктуру как код
Devconf-2015 Тестируем инфраструктуру как кодDevconf-2015 Тестируем инфраструктуру как код
Devconf-2015 Тестируем инфраструктуру как код
Igor Kurochkin
Как подружить команду админов с N командами разработки / Денис Яковлев (2ГИС)
Как подружить команду админов с N командами разработки / Денис Яковлев (2ГИС)Как подружить команду админов с N командами разработки / Денис Яковлев (2ГИС)
Как подружить команду админов с N командами разработки / Денис Яковлев (2ГИС)
Ontico
Codeception + Docker + Robo и что из этого вышло
Codeception + Docker + Robo и что из этого вышлоCodeception + Docker + Robo и что из этого вышло
Codeception + Docker + Robo и что из этого вышло
COMAQA.BY
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...
it-people
Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac
Константин Назаров – Распараллеливание сборки Parallels Desktop для MacКонстантин Назаров – Распараллеливание сборки Parallels Desktop для Mac
Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac
404fest
CI для тестировщиков или как отказаться от релизов
CI для тестировщиков или как отказаться от релизовCI для тестировщиков или как отказаться от релизов
CI для тестировщиков или как отказаться от релизов
SQALab
Типовая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive TechnologiesТиповая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive Technologies
Positive Hack Days
Jenkins 2.0: Организуем тестирование в составе Continuous Delivery
Jenkins 2.0: Организуем тестирование в составе Continuous DeliveryJenkins 2.0: Организуем тестирование в составе Continuous Delivery
Jenkins 2.0: Организуем тестирование в составе Continuous Delivery
SQALab

Viewers also liked (20)

«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
2ГИС Технологии
Суперсилы Chrome developer tools
Суперсилы Chrome developer toolsСуперсилы Chrome developer tools
Суперсилы Chrome developer tools
2ГИС Технологии
«Реактивные грабли» — Дмитрий Кулижников, 2ГИС
«Реактивные грабли» — Дмитрий Кулижников, 2ГИС«Реактивные грабли» — Дмитрий Кулижников, 2ГИС
«Реактивные грабли» — Дмитрий Кулижников, 2ГИС
2ГИС Технологии
«Badger — инструмент для мониторинга качества продуктов» – Ирина Шрейдер, 2ГИС
«Badger — инструмент для мониторинга качества продуктов» – Ирина Шрейдер, 2ГИС«Badger — инструмент для мониторинга качества продуктов» – Ирина Шрейдер, 2ГИС
«Badger — инструмент для мониторинга качества продуктов» – Ирина Шрейдер, 2ГИС
2ГИС Технологии
Тимофей Чаптыков «Верстальщик должен быть ленивый»
Тимофей Чаптыков «Верстальщик должен быть ленивый»Тимофей Чаптыков «Верстальщик должен быть ленивый»
Тимофей Чаптыков «Верстальщик должен быть ленивый»
DevDay
«Как выковать процесс самому» –Михаил Вязанкин, 2ГИС
«Как выковать процесс самому» –Михаил Вязанкин, 2ГИС«Как выковать процесс самому» –Михаил Вязанкин, 2ГИС
«Как выковать процесс самому» –Михаил Вязанкин, 2ГИС
2ГИС Технологии
Codefest2014 trends
Codefest2014 trendsCodefest2014 trends
Codefest2014 trends
Alexey Rybak
CodeFest 2013. Кульпин В. — Первый на Луне или открываем удаленный офис разра...
CodeFest 2013. Кульпин В. — Первый на Луне или открываем удаленный офис разра...CodeFest 2013. Кульпин В. — Первый на Луне или открываем удаленный офис разра...
CodeFest 2013. Кульпин В. — Первый на Луне или открываем удаленный офис разра...
CodeFest
Как защитить свой код
Как защитить свой кодКак защитить свой код
Как защитить свой код
2ГИС Технологии
«Открытая веб картография», Илья Таратухин
«Открытая веб картография», Илья Таратухин«Открытая веб картография», Илья Таратухин
«Открытая веб картография», Илья Таратухин
DevDay
Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС
Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИСПартицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС
Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС
2ГИС Технологии
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИСTARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
2ГИС Технологии
«Велогосипед», Данил Ильиных
«Велогосипед», Данил Ильиных«Велогосипед», Данил Ильиных
«Велогосипед», Данил Ильиных
DevDay
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС «Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
2ГИС Технологии
Article25
Article25Article25
Article25
Harry Wood
Используем неизменяемые данные и создаем качественный код — Игорь Кудрин, 2ГИС
Используем неизменяемые данные и создаем качественный код — Игорь Кудрин, 2ГИСИспользуем неизменяемые данные и создаем качественный код — Игорь Кудрин, 2ГИС
Используем неизменяемые данные и создаем качественный код — Игорь Кудрин, 2ГИС
2ГИС Технологии
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
DevDay
«Автоматизация тестовой инфраструктуры в 2ГИС» — Антон Голицын, 2ГИС
«Автоматизация тестовой инфраструктуры в 2ГИС» — Антон Голицын, 2ГИС«Автоматизация тестовой инфраструктуры в 2ГИС» — Антон Голицын, 2ГИС
«Автоматизация тестовой инфраструктуры в 2ГИС» — Антон Голицын, 2ГИС
2ГИС Технологии
«Построение Read Model-ей с использованием потоков событий» — Денис Иванов, 2ГИС
«Построение Read Model-ей с использованием потоков событий» — Денис Иванов, 2ГИС«Построение Read Model-ей с использованием потоков событий» — Денис Иванов, 2ГИС
«Построение Read Model-ей с использованием потоков событий» — Денис Иванов, 2ГИС
2ГИС Технологии
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
2ГИС Технологии
«Реактивные грабли» — Дмитрий Кулижников, 2ГИС
«Реактивные грабли» — Дмитрий Кулижников, 2ГИС«Реактивные грабли» — Дмитрий Кулижников, 2ГИС
«Реактивные грабли» — Дмитрий Кулижников, 2ГИС
2ГИС Технологии
«Badger — инструмент для мониторинга качества продуктов» – Ирина Шрейдер, 2ГИС
«Badger — инструмент для мониторинга качества продуктов» – Ирина Шрейдер, 2ГИС«Badger — инструмент для мониторинга качества продуктов» – Ирина Шрейдер, 2ГИС
«Badger — инструмент для мониторинга качества продуктов» – Ирина Шрейдер, 2ГИС
2ГИС Технологии
Тимофей Чаптыков «Верстальщик должен быть ленивый»
Тимофей Чаптыков «Верстальщик должен быть ленивый»Тимофей Чаптыков «Верстальщик должен быть ленивый»
Тимофей Чаптыков «Верстальщик должен быть ленивый»
DevDay
«Как выковать процесс самому» –Михаил Вязанкин, 2ГИС
«Как выковать процесс самому» –Михаил Вязанкин, 2ГИС«Как выковать процесс самому» –Михаил Вязанкин, 2ГИС
«Как выковать процесс самому» –Михаил Вязанкин, 2ГИС
2ГИС Технологии
CodeFest 2013. Кульпин В. — Первый на Луне или открываем удаленный офис разра...
CodeFest 2013. Кульпин В. — Первый на Луне или открываем удаленный офис разра...CodeFest 2013. Кульпин В. — Первый на Луне или открываем удаленный офис разра...
CodeFest 2013. Кульпин В. — Первый на Луне или открываем удаленный офис разра...
CodeFest
«Открытая веб картография», Илья Таратухин
«Открытая веб картография», Илья Таратухин«Открытая веб картография», Илья Таратухин
«Открытая веб картография», Илья Таратухин
DevDay
Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС
Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИСПартицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС
Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС
2ГИС Технологии
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИСTARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
2ГИС Технологии
«Велогосипед», Данил Ильиных
«Велогосипед», Данил Ильиных«Велогосипед», Данил Ильиных
«Велогосипед», Данил Ильиных
DevDay
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС «Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
2ГИС Технологии
Используем неизменяемые данные и создаем качественный код — Игорь Кудрин, 2ГИС
Используем неизменяемые данные и создаем качественный код — Игорь Кудрин, 2ГИСИспользуем неизменяемые данные и создаем качественный код — Игорь Кудрин, 2ГИС
Используем неизменяемые данные и создаем качественный код — Игорь Кудрин, 2ГИС
2ГИС Технологии
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
DevDay
«Автоматизация тестовой инфраструктуры в 2ГИС» — Антон Голицын, 2ГИС
«Автоматизация тестовой инфраструктуры в 2ГИС» — Антон Голицын, 2ГИС«Автоматизация тестовой инфраструктуры в 2ГИС» — Антон Голицын, 2ГИС
«Автоматизация тестовой инфраструктуры в 2ГИС» — Антон Голицын, 2ГИС
2ГИС Технологии
«Построение Read Model-ей с использованием потоков событий» — Денис Иванов, 2ГИС
«Построение Read Model-ей с использованием потоков событий» — Денис Иванов, 2ГИС«Построение Read Model-ей с использованием потоков событий» — Денис Иванов, 2ГИС
«Построение Read Model-ей с использованием потоков событий» — Денис Иванов, 2ГИС
2ГИС Технологии

Similar to «GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков (20)

что такое Git и как с ним бороться
что такое Git и как с ним боротьсячто такое Git и как с ним бороться
что такое Git и как с ним бороться
Владимир Кожаев
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
Yehor Herasymchuk
Практика разработки веб-серверов на Rust
Практика разработки веб-серверов на RustПрактика разработки веб-серверов на Rust
Практика разработки веб-серверов на Rust
Michael Pankov
Giflow
GiflowGiflow
Giflow
Egor Petrov
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...
it-people
Git для начинающих
Git для начинающихGit для начинающих
Git для начинающих
Vadim Drobinin
Git presentation
Git presentationGit presentation
Git presentation
Alexandr Babenko
Scino: DVCS на примере Git
Scino: DVCS на примере GitScino: DVCS на примере Git
Scino: DVCS на примере Git
SCINO
Как настроить запуск R скриптов по расписанию с помощью GitHub Actions
Как настроить запуск R скриптов по расписанию с помощью GitHub ActionsКак настроить запуск R скриптов по расписанию с помощью GitHub Actions
Как настроить запуск R скриптов по расписанию с помощью GitHub Actions
Алексей Селезнёв
Основы работы с Git
Основы работы с GitОсновы работы с Git
Основы работы с Git
Denis Latushkin
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
FDConf
Git для новичков
Git для новичковGit для новичков
Git для новичков
Softline
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Ontico
Git for you
Git for youGit for you
Git for you
Pavel Alexeev
Выбираем стратегию создания бранчей
Выбираем стратегию создания бранчейВыбираем стратегию создания бранчей
Выбираем стратегию создания бранчей
Vitebsk DSC
Барнаул15
Барнаул15Барнаул15
Барнаул15
Михаил Тюрин
Vagrant и chef. от dev до deploy
Vagrant и chef. от dev до deployVagrant и chef. от dev до deploy
Vagrant и chef. от dev до deploy
zykin-ilya
Никита Шультайс. "Система управления версиями git"
Никита Шультайс. "Система управления версиями git"Никита Шультайс. "Система управления версиями git"
Никита Шультайс. "Система управления версиями git"
Egor Stremousov
Drupal code sprint для новичков
Drupal code sprint для новичковDrupal code sprint для новичков
Drupal code sprint для новичков
Ovadiah Myrgorod
что такое Git и как с ним бороться
что такое Git и как с ним боротьсячто такое Git и как с ним бороться
что такое Git и как с ним бороться
Владимир Кожаев
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
Yehor Herasymchuk
Практика разработки веб-серверов на Rust
Практика разработки веб-серверов на RustПрактика разработки веб-серверов на Rust
Практика разработки веб-серверов на Rust
Michael Pankov
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...
it-people
Git для начинающих
Git для начинающихGit для начинающих
Git для начинающих
Vadim Drobinin
Scino: DVCS на примере Git
Scino: DVCS на примере GitScino: DVCS на примере Git
Scino: DVCS на примере Git
SCINO
Как настроить запуск R скриптов по расписанию с помощью GitHub Actions
Как настроить запуск R скриптов по расписанию с помощью GitHub ActionsКак настроить запуск R скриптов по расписанию с помощью GitHub Actions
Как настроить запуск R скриптов по расписанию с помощью GitHub Actions
Алексей Селезнёв
Основы работы с Git
Основы работы с GitОсновы работы с Git
Основы работы с Git
Denis Latushkin
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
FDConf
Git для новичков
Git для новичковGit для новичков
Git для новичков
Softline
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Ontico
Выбираем стратегию создания бранчей
Выбираем стратегию создания бранчейВыбираем стратегию создания бранчей
Выбираем стратегию создания бранчей
Vitebsk DSC
Vagrant и chef. от dev до deploy
Vagrant и chef. от dev до deployVagrant и chef. от dev до deploy
Vagrant и chef. от dev до deploy
zykin-ilya
Никита Шультайс. "Система управления версиями git"
Никита Шультайс. "Система управления версиями git"Никита Шультайс. "Система управления версиями git"
Никита Шультайс. "Система управления версиями git"
Egor Stremousov
Drupal code sprint для новичков
Drupal code sprint для новичковDrupal code sprint для новичков
Drupal code sprint для новичков
Ovadiah Myrgorod

«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков

  • 1. Github Flow. Немного сложнее, чем на бумаге Александр Бирюков, Руководитель группы разработки ПО, 2GIS
  • 2. Александр Бирюков Руководитель группы разработки ПО Куратор секции FrontEnd Люблю JavaScript 2
  • 8. 6 принципов GitHub Flow 1. master всегда в рабочем состоянии и готов к деплою 2. Каждая новая ветвь создаётся от master и имеет понятное название 3. Постоянно актуализируйте удалённую ветвь и локальную 4. В любой момент времени создавайте Pull Request 5. Вливайте ветвь только после того как кто-то просмотрел изменения 6. Как только изменения попали в master их следует задеплоить 8
  • 9. 6 принципов GitHub Flow 1. master всегда в рабочем состоянии и готов к деплою 2. Каждая новая ветвь создаётся от master и имеет понятное название 3. Постоянно актуализируйте удалённую ветвь и локальную 4. В любой момент времени создавайте Pull Request 5. Вливайте ветвь только после того как кто-то просмотрел изменения 6. Как только изменения попали в master их следует задеплоить 9
  • 10. #4 и #5 — Pull Request merge master • Большая команда — генерирует много PR • Подвисший PR быстро устаревает (1,5 мес) • Две системы трекинга — Github и ваша внутренняя • Достаточно ли ревью чтобы слить задачу в master? 10
  • 11. #4 и #5 — Что пришлось сделать • Оповещаем о самых срочных PR • Утром и после обеда каждый выделяет время на ревью • Ревью минимум от 2-х членов команды • Подружили JIRA и Github • В JIRA держим задачи и ориентируемся на все статусы • В Github ведём только CodeReview • Написали расширение к Chrome для отображения статуса PR 11
  • 13. 6 принципов GitHub Flow 13 1. master всегда в рабочем состоянии и готов к деплою 2. Каждая новая ветвь создаётся от master и имеет понятное название 3. Постоянно актуализируйте удалённую ветвь и локальную 4. В любой момент времени создавайте Pull Request 5. Вливайте ветвь только после того как кто-то просмотрел изменения 6. Как только изменения попали в master их следует задеплоить
  • 14. #2 и #3 — Разработка в ветках • Актуализируем локальную ветку — merge vs. rebase • Актуализируем удалённу ветку — force push после rebase Нужно хорошо знать и уметь пользоваться git 14
  • 15. #2 и #3 — Что пришлось сделать 1. Принять ряд соглашений по работе с ветками • Именование веток • Описать жизненный цикл • Нет множественному ветвлению 2. Провести 2 внутренних семинара по использованию git 15
  • 16. 6 принципов GitHub Flow 16 1. master всегда в рабочем состоянии и готов к деплою 2. Каждая новая ветвь создаётся от master и имеет понятное название 3. Постоянно актуализируйте удалённую ветвь и локальную 4. В любой момент времени создавайте Pull Request 5. Вливайте ветвь только после того как кто-то просмотрел изменения 6. Как только изменения попали в master их следует задеплоить
  • 17. #1 и #6 — Деплоить!!1 • Готов к деплою — протестирован • В порядке поступления — быстро 17
  • 18. #1 и #6 — Деплоить!!1 Тестируется быстро • Есть богатый набор тестов всех уровней • Jenkins или любая другая система Выкатывается быстро • Есть система автоматической сборки проекта • Ansible, Chef или любая другая система 18
  • 19. #1 и #6 — Что пришлось сделать 19 • Дополнить базу тестов почти на 50% — ~3 недели работы • Группы тестов для каждого этапа • Настроить Jenkins на организацию автоматических сборок и прогона финального набора тестов • Процесс и инфраструктура для выкладки проекта
  • 20. Итого, нам пришлось сделать 20 • В срочном порядке дописывать недостающие автотесты • Полностью перенастроить систему автоматизированного тестирования (CI) • По максимуму автоматизировать и отладить процесс доставки кода на бой (CD) • Принять несколько дополнительных командных соглашений • Написать расширение для браузера для синхронизации Jira+Gihub • Провести несколько тренингов/презентаций по Git
  • 21. Каких результатов достигли • На проекте есть честный CodeReview • Более 1000 F-тестов которые реально помогают • Пул из ~10-15 PR • 5-7 на ревью • 5-7 готовы к тестированию • Самый старый PR - 8-12 дней • 1 QA в день интегрирует 2-4 PR. Т.е 4-12 PR/день • Последняя ретроспектива - GithubFlow круто! 21
  • 22. GitHub Flow — это действительно круто!
  • 23. Спасибо! Вопросы? Александр Бирюков a.biryukov@2gis.ru @illbullet http://2gis.ru, http://beta.2gis.ru
  • 24. Git Flow The primary reason for moving away is that the git-flow process is hard to deal with in a continuous (or near-continuous) deployment model. Nicholas C. Zakas The general feeling is that git-flow works well for products in a more traditional release model, where releases are done once every few weeks.... Nicholas C. Zakas ““ 24
  • 25. Команда профессионалов • 1 Project Manager • 1 Team Lead • 9 JS Developers • 4 FE Developers • 3 QA 25