Контроль Версий Сборка Тестирование

Общий подход

Каждый разработчик имеет свою виртуалку с системой сборки и может выпускать свою именную версию-branch kolko1 и kolko2 и может обновлять на нее виртуалки и клиентов.
Каждый разработчик имеет свою систему тестирования и может тестировать свою именную версию.
В carbon не создается бранч для каждой задачи, есть 2 или более именных branch kolko1 и kolko2 kolko3 для решения текущий задачи, и срочных задач.
Есть центральный сервер сборки и тестирования, на нем выпускаются официальные версии, которые выкладываются на updater.carbonsoft.ru.
Спринт - неделя с обязательной доской и скрамом. Версия - 4 спринта = 1 месяц, если спринтов меньше, то версия все равно выходит раз в месяц до 10 числа. Версии выпускаются один месяц фичи следующий баги и недоработки, далее снова фичи.(исключения по отдельным задачам возможны) Подробности в разделе Agile.

Система сборки и тестирования - CI сервер

master, devel, hotfix, integra, testing собираются и тестируются на сервере CI полностью автоматически, для каждого бранча отдельная виртуалка сборки.
Автоматически по циклу обнаруживаются новые коммиты и собираются новые версии, там же делаются автомерджи слева направо master→devel→ и т.д.
При изменении простейшего bash файла, пересборка должна занимать не более 15-30 секунд.
При изменении си файла добавляется время компиляции.
Система автоматического функционального тестирования обнаруживает новый билд - обновляется и тестирует.
Каждый разработчик имеет свою виртуалку с системой сборки и может выпускать свою именную версию-branch kolko1 и kolko2 и может обновлять на нее свои тестовые виртуалки и клиентов.
Каждый разработчик имеет свою систему тестирования и может тестировать свою именную версию.
Система сборки умеет выкладывать версию на сервер обновлений - updater.
Также продукт может обновляться напрямую с системы сборки для быстрого тестирования в офисе разработки.

Branch

                                dima1
                             /          \
master→devel→hotfix→integra → kolko1 → testing
   \                       | \         / |
    master_hotfix          |   anton1    |
                            \           /
                               sergey1                       

Все изменения автоматически попадают слева направо скриптами системы сборки.
Версия testing включает все изменения и все коммиты продукта, и этот бранч тестируется по кругу, чтобы находить кросбаги заранее.
Изменения справа налево делаются через мердж реквест другому программисту.
Изменения из integra в devel и из devel в master делаются или ментейнером или релиз-менеджером строго по правилам выпуска официальной версии.

Пример:

  1. kolko разрабатывает фичу в ветке kolko1, это может быть много коммитов и несколько git repo.
  2. собирает свою полную версию продукта kolko1 и тестирует ее.
  3. делает мердж реквест в integra на обычного программиста dima.
  4. dima смотрит все ли понятно и нет ли явных проблем в коде, при необходимости общаются через комментарии gitlab в мердж реквесте.
  5. dima принимает изменения из kolko1 в integra.
  6. integra обкатывается на новых клиентах которым нужны новые фичи.
  7. за месяц накапливаются все новые фишки в ветке integra(обычно это 4 недели = 4 спринта).
  8. раз в месяц скрипт сборки или руками делается мердж реквест из integra в devel на ментейнером(или релиз менеджера)
  9. после просмотра кода мердж реквест принимается в devel выпускается новая версия devel
  10. раз в несколько месяцев выпускается master мердж реквестом из devel.

Если есть критичные изменения они вносятся в hotfix и автоматом попадают в integra и ветки разработчиков.
Утром ментейнер проверяет и вносит hotfix в devel.

Версии

branch - major.minor.release(build)
Пример: devel 8.3.11(312) build увеличивается автоматически при сборке. minor и release увеличивает или ментейнер или релиз менеджер по строгим правилам.

  • Master - основная масса клиентов. Все, кто работает в продакшене минимум месяц.
  • Devel - новые клиенты, не проработавшие 1 месяц, сайте в разделе download и является свежей, отлаженной и протестированной. При выходе следующего master с версией больше этого devel, клиент автоматически переходит на этот master будет иметь те же фичи, но еще более стабильную версию.
  • Hotfix - срочные исправления от разработчиков для devel. Для master hotfix обычно выходит черипиками или стабильным форком вида master→master_kolko1
  • Interga - ветка для объединения изменений разработчиков. Накапливает изменения за месяц фичи, тюнинг, вебка, не критикал баги и из нее формируется новая официальная версия Devel.
  • Testing - это специальная ветка в которую попадают все коммиты разработчиков даже если он не были протестированы. То есть это мердж всех веток всех разработчиков.

Выпуск official devel версий

В конце месяца строго до 10 числа выпускается devel версия и делается новость на сайт и рассылка по клиентам и pr-агентствам.
Выпуск official-версии должен выполняться только утром с понедельника по четверг.
Алгоритм:

  1. Текущие версии master=8.2.7 devel=8.3.1 integra=8.4.0
  2. Выпуск master. Мейнтейнер просматривает мердж реквест из devel в master на предмет подозрительного и мусора. Если все ОК принимает мердж. Мейнтейнер устанавливает руками верcию master равную devel, и release увеличивает на+1. Пример devel=8.3._1_ master=8.3._2_
  3. Выпуск devel. Мейнтейнер просматривает мердж реквест из integra в devel на предмет подозрительного и мусора. Если все ОК принимает мердж. Мейнтейнер устанавливает руками верcию devel равную integra, и release увеличивает на+1. integra=8.4._0_ devel=8.4._1_
  4. Запускаем новую integra 8.5.0

Hotfix devel

  • Исправления для devel разработчики пушат в hotfix и они автоматом попадают в interga и далее другим разработчикам, но не попадают в devel.
  • Мейнтейнер раз в день просматривает мердж реквест из hotfix в devel на предмет мусора и подозрительных вещей.
  • Если все ОК принимает мердж и release увеличивает на+1. Пример devel=8.3._2_ master=8.3._3_
  • Если изменения требуются и для master можно сделать черипик

Hotfix master

  • Разработчик в ветке master_hotfix вносит исправления и тестирует их
  • Если все ок Мейнтейнер просматривает и вносит master_hotfix в master

Версии с клиентскими доработками.

  • Все доработки под конкретного клиента делаются в ветке integra и проверяются сразу у клиента.
  • Сложных затянутых ситуациях клиенту выделяется отдельная именная ветка с полным набором CI виртуалок.
  • Если клиент находится на персональной ветке или на integra, то он считается не до конца интегрированным и обновляется в пределах своей ветки. Переход на devel или master делает тех.поддержка вручную, после слияния веток.

Версия testing

  • testing это специальная ветка в которую попадают все коммиты разработчиков даже если он не были протестированы. То есть это мердж всех веток всех разработчиков.
  • testing тестируется по кругу в облаке CI, при нахождении ошибок они сообщаются всем разработчикам чьи коммиты появились с последнего удачного тестирования или просто всем.
  • Все мердж конфликты рулят их создатели сообща и срочно.

Схема обновления.

  • Клиент скачивает с сайта версию devel 8.3._1_
  • В течение месяца обновляется на свежие релизы devel 8.3._2_ 8.3._3_
  • Как только в конце месяца выйдет новый master он будет старше, чем devel версия клиента клиента и клиент перейдет на мастер. Клиент переходит на master если версия мастера(8.3.4) старше, чем версия клиента(8.3.3), несмотря на то, что есть версия official devel(8.4.1) старше, чем master.
  • Обновления должны попадать не сразу всем клиентам, а порциями случайных клиентов в день. (например 4-8-16-32-64и далее). До 25 числа должны все обновиться.
  • Блокировка обновления разрешена: на 2 часа - для известного бага, на 2 дня - для плавающего, который не удается установить. При просрочке сразу звоним руководителю. В блокировке обязательно указываем почему заблокировано и кто заблокировал и дату.

Прием изменений и codereview через мердж реквест

  • Разработчики разрабатывают все в своих ветка их должно быть ограниченное колво 2-10, но как минимум две ${login}1 ${login}2
  • Для каждой версии должны быть подняты виртуалки makedistro и autotest на машине разработчика средствами утилиты crab
  • Все коммиты попадают из версии разработчика в integra через мердж реквест к другому разработчику, который делает codereview.

Выкладывание master новых оф версий

Обычно делается реже чем devel, либо обновления притормаживаются.
Но все зависит от продуктов.

Читать далее: Развертывание программ или сервисов

~~OWNERAPPROVE~~