Мы небольшая фирма с несколькими командами, которые управляют своими собственными git-репозиториями. Это веб-платформа, и артефакты каждой команды используются в конце дня для ночных тестов. Мы пытаемся формализовать процесс создания версий и упаковки.
У каждой команды есть мастер ветвь, где они занимаются повседневной разработкой. Члены группы обеспечения качества хотят, чтобы артефакты от изменений их команды были развернуты на испытательном стенде, где все компоненты объединяются шеф-поваром. Артефакты - это архивы, но я бы хотел преобразовать их в RPM, чтобы мы могли правильно продумать и продумать версии.
Процесс выпуска включает в себя отключение ветви выпуска от ветви разработки (в большинстве случаев master) каждого репозитория git. Это затем дается гарантии качества, которые проводят тесты и подписывают набор артефактов.
Например, это типичный git-репозиторий со связанными ветками релиза:
0-0-0-0-0-0-0-0-0-0 (master)
| |
0 0
(rel-1) |
0
(rel-2)
Я застрял, пытаясь выяснить схему выполнения версий пакетов из веток разработки. Мы не хотим чрезмерно маркировать основную ветвь каждого репо и ограничивать теги только выпусками ветвей. Но мы должны иметь возможность запрашивать развернутые пакеты на тестовых машинах, используя стандартную семантику yum / rpm. Как будут выглядеть версии для разработки, если в основной ветке нет тегов? Я понимаю, что это git describe
может дать мне полезное представление о версии сборки, но это хорошо работает, когда отмечены различные точки выпуска в ветви.
РЕДАКТИРОВАТЬ1: В ответ на ответ @ Urban48
Я подумал, что должен объяснить наш процесс выпуска немного подробнее. Для целей этого обсуждения давайте предположим, что у нас есть ветка master
во всех репозиториях. master
Отрасль считается веткой разработки и развертыванием на автоматизированный CI-CD включена среда QA. Именно здесь выполняется подмножество ночных тестов для обеспечения стабильности мастера. Мы смотрим на этот список работ, прежде чем вырезать ветку релиза. Наши ветки выпуска недолговечны. Скажем, после вырезания ветки выпуска (из стабильного мастера) выполняется полная регрессия, исправления вносятся и внедряются в производство. Это займет около недели, чтобы сделать. Мы выпускаем почти каждые две недели для производства.
Наши ветви функций всегда вырезаны из master и проходят определенное тестирование разработчиками перед слиянием с master, после чего они проходят проверку стабильности CI-CD.
Исправления производятся в ветвях исправлений (вырезанных из веток релиза) и внедряются с минимальным влиянием тестирования в производство.
Наша стратегия управления версиями для веток релиза и исправления следует принципам semver. Отпустить ветви во ходе цикла QA через версии , как v2.0.0-rc1
, v2.0.0-rc2
и , наконец , после QA знака-офф стала v2.0.0
.
Мы иногда делаем точечные выпуски для небольших функций, которые объединяются, чтобы выпустить ветки (а затем освоить), где становятся версии v2.1.0
. И исправления предполагают v2.1.1
шаблон.
Вопрос, однако, не в версии этих веток. Я бы предпочел не менять эту схему управления версиями вообще. Единственное изменение происходит для развития отрасли, т.е. мастер. Как я могу надежно указать в среде CI-CD, какая версия существует по сравнению с предыдущим выпуском в производство. В идеале это можно сделать с помощью смарт-тегов git, но предпочтение отдается тому, что не чрезмерно помечает главную ветвь.
источник
rc
суффиксу? Это будет диктоватьmajor.minor
версию для разработки.rc
и номер сборки может быть получен только на основании этого. Такжеrc
на мастере нет смысла, потому что мы никогда не отпускаем от мастера. Мы помечаем наших кандидатов на выпуск сегодня в ветвях релиза как часть циклаrc
суффикс.Ответы:
Хм, ну у меня есть пример .net, который может быть технологически независимым.
Я просто сделаю краткое резюме.
git-репо для каждого компонента с помощью стратегии ветвления gitflow
все обязательства по разработке вызывают команду построения города
В сборке teamcity добавлена версия с дополнительным руководством вручную + номер сборки в AssemblyInfo.cs, т. е. 1.1.hotfix.build.
teamcity запускает упаковку nuget, используя тот же номер версии для опубликованных библиотек nuget
осьминог развертывает готовую сборку в qa для ручного тестирования (при условии, что все тесты пройдены)
если все хорошо, вручную разверните версию в производство через осьминога.
Теперь это означает, что вы получите много версионных пакетов. Мы поэкспериментировали с использованием флага -prerelease, но для этого потребовался дальнейший перенос пакета вручную с пре-релиза на «нормальный» шаг и требование перестроения компонентов, которые зависели от них.
Ключевым моментом является уникальная версия каждой сборки через некоторый центральный процесс.
Тогда вы находитесь в ситуации «хм, какие версии я хочу», а не «о боже, какую версию я получил?»
Редактировать: повторные комментарии.
Просто чтобы подчеркнуть эту ключевую вещь на самом деле. Решите, какая ветвь представляет собой законченное программное обеспечение, и версия, которую ВСЕ передает ему. развертывать только версионное программное обеспечение из этой ветки.
Однако я считаю, что вам необходимо рассмотреть свою стратегию ветвления.
источник
next
+builds
похожа на то, какgit describe
Позвольте мне предложить альтернативный рабочий процесс, который может решить вашу проблему с версиями или просто помочь вам придумать другие пути решения проблемы.
Сначала немного философии ..
(Я делаю несколько предположений о вашем рабочем процессе, пожалуйста, поправьте меня, если я ошибаюсь)
Тесты проводятся задним числом :
Разветвитесь,
maser
чтобы перейти к функции, затем превратите ее в артефакт для тестирования QA.проблема в том, что если тесты не пройдены,
master
возможно, они сломаны!побочные эффекты:
Это заставляет разработчиков не доверять
master
Так как вы переходите от главного к выпускному, что произойдет, если предыдущий выпуск будет поврежден? он останавливает интеграцию вашей новой функции, пока мастер не будет снова зафиксирован.
Когда ошибка исправлена в ветке релиза, объединение
master
может привести к конфликтам слияния. (а нам не нравятся конфликты)Небольшой код сливается и исправляется :
Трудно отслеживать весь код, который объединяется
master
, например, небольшие исправления или изменения, которые не являются частью определенной функции.побочные эффекты:
Разработчик не уверен, стоит ли ему исправлять это небольшое исправление сейчас или позже.
Должен ли я версия этого нового небольшого исправления, а?
В любой момент времени не ясно, в каком состоянии находится
master
ветвь, и какой код там находитсячто-то сломало сборку, что не является частью новой функции. и его действительно трудно отследить, откуда он
Моя идея для рабочего процесса Git заключается в следующем:
Ветка
master
для разработки новых функций, как вы уже сделали. но теперь вместо того, чтобы выпускать из этой недавно созданной ветви, включите эту функцию и выберите ееrelease
.Теперь у вас есть лучший контроль над тем, что входит в определенный выпуск.
Теперь действительно легко выделить версии для разработки и стабильные версии.
Вы можете продолжать создавать артефакты из этих ветвей функций для обеспечения качества.
Если все в порядке, объедините эту функцию
master
и вставьте эту функцию / bug-fix / hot-fix в ветку релиза.Управление версиями версии веток может использовать некоторые соглашения об именах, такие как
1.2.3-rc.12345
версии в
release
ветке будут использовать только1.2.3
(1.2.3
>1.2.3-rc.12345
и еще одну вещь, о которой нужно беспокоиться)Этот рабочий процесс решает проблемы, упомянутые выше, и многое другое.
Он также предлагает разумную стратегию управления версиями, и большая часть этого цикла выпуска может быть автоматизирована.
Я надеюсь, что это поможет вам, я с удовольствием расскажу о любых крайних случаях, которые вы можете придумать.
PS:
я прошу прощения за мой английский, это не мой основной язык.
источник
Ваш процесс кажется очень запутанным, и получение небольшого количества тегов кажется неизбежным.
На ум приходят две идеи:
Вы рассматриваете ветвь "master" как то, что мы обычно имеем в ветке "development". Это сильно загрязняет ветку сообщений.
Когда QA закончит свою работу, у вас может быть сервер build / CI для создания отчета (например, текстового файла) с тегами всех используемых репозиториев. Теперь у вас будет файл с версиями, которые можно разместить в репо. Затем вы помечаете ветку только версией выпуска, и если вы хотите проверить версии отдельных компонентов, вы можете проверить отчет.
источник