Создайте один раз, разверните многие, используя gitflow и gitversion
Gitflow соответствует нашим потребностям, и, похоже, даритель подходит Gitflow. Но есть одна вещь, которую я не до конца понимаю. Позвольте мне объяснить, что беспокоит меня.
- Мы работаем над некоторыми функциями в ветке разработки - все пакеты помечены так: 1.3.0-unstable.1, 1.3.0-unstable.2 и так далее.
- Каждый пакет проходит через конвейер - dev, test, uat, prod.
- Итак, когда dev готов и все хорошо, в соответствии с gitflow мы запускаем ветку release.
- Никаких изменений не требуется вносить в релиз, мы заканчиваем это сразу - ветка релиза объединяется с мастером и с разработкой.
- Сервер сборки создает еще один пакет 1.3.0, который готов к работе.
Как добиться сборки один раз, развернуть много здесь? Согласно всем правилам, нам нужно продвигать 1.3.0-unstable.x в prod env, потому что именно этот пакет был протестирован в dev и test, но версия выглядит немного странно для prod, не так ли? Когда 1.3.0, пришедшая из основной ветки, нигде не была развернута.
Вопрос похож на этот: в модели потока git я должен собрать из коммита слияния в master для выпуска?
Ответ не очень удовлетворителен:
- Мы делаем -no-ff при слиянии с мастером
- Это все еще другой пакет
1 ответ
Позвольте мне ответить на этот вопрос сам. Мы подошли к моменту, когда поняли, что поддержка нескольких версий / нескольких сред с использованием gitflow - это огромная нагрузка. Поэтому мы искали что-то более простое - GitHub. Конечно, это не полностью решило исходную проблему (построить один раз - развернуть много) для нас, но это то, как мы частично решили ее.
Наш трубопровод изменился
от: dev -> test -> uat -> prod
: dev -> test, а затем uat -> prod
Итак, как я уже говорил, мы используем поток GitHub. Всякий раз, когда мы работаем над новой функцией, сначала - мы создаем имя элемента ветки от последнего мастера. Каждая сборка из этой ветки имеет версии, как это 1.3.0-featurename.1, 1.3.0-featurename.2 и так далее.
Как только разработчик заканчивает реализацию и выполняет все проверки dev, эти точные двоичные файлы отправляются в тестовую среду для QA. После того, как QA ребята подписывают эту версию, мы будем рады протолкнуть ее через наш второй конвейер uat -> prod. Мы объединяем запрос на извлечение для ветви имени элемента и версии сборки, которую мы получаем впоследствии, скажем: 1.3.1 отправляется в среду uat. Как только он подписан, мы добавляем точно такие же двоичные файлы в среду prod.
Если в то же время разрабатывалось несколько ветвей функций, следующую версию, которую мы отправляем в тестовую среду, предполагается перебазировать поверх последнего мастера и снова через конвейер.