Мы начинаем сталкиваться с проблемой по мере того, как становимся все больше, когда функции переходят в стадию тестирования, но к тому времени, когда все проверено и утверждены новые функции, готовятся к тестированию.
Это создает среду, в которой мы почти никогда не сможем продвинуться в производство, потому что у нас есть комбинация проверенных и непроверенных функций. Я уверен, что это общая проблема, но я еще не нашел для нас хороших ресурсов.
Некоторые особенности:
- GIT на BitBucket
- Jenkins для развертывания по сценарию в Azure
То, на что я надеюсь, - это способ изолировать функции при их перемещении по средам и выдвигать только то, что готово для продвижения.
Ответы:
Похоже, у вас есть несколько проблем здесь:
1. Определение функций для конкретной версии
Это проблема управления проектом и проблема координации. Будет ли эта функция выпущена до, одновременно или после этой другой функции? Если релизы хотят появляться по одной функции за один раз, то определите это. Если функции будут сгруппированы в релизы, то выясните, что это за группы, и примените их к разработчикам и лицам, принимающим решения. Используйте систему отслеживания проблем или тикетов, чтобы помечать релизы. Дайте понять, что если одна из функций определенного выпуска запрещена, то все они есть.
2. Стратегии ветвления
Git-flow - простой ответ на подобные проблемы, и часто люди используют вариант git-flow, даже если они не знают, что это такое. Я не собираюсь говорить, что это универсальное решение для всех проблем, но это очень помогает.
Похоже, у вас возникла проблема с недетерминированными стратегиями выпуска, когда функции одобрены как scattershot, и что-то, что начало разрабатываться давным-давно, может быть выпущено после чего-то, что началось совсем недавно - функции скачкообразного изменения.
Долгоживущие функциональные ветки или ветки одновременного выпуска, вероятно, являются лучшим ответом для такого рода проблем. Объедините (или перебазируйте, если вам это удобно) последние новости от мастера в свои долгосрочные ветви. Будьте осторожны, объединяйте только те функции, которые уже работают, в противном случае вы столкнетесь с проблемами, с которыми вы столкнулись сейчас (слишком много смешанных функций в одной ветви).
Ветви «исправлений» или «исправлений» являются неотъемлемой частью этого процесса; используйте их для небольших одноразовых исправлений с коротким циклом контроля качества.
Из вашего описания может быть даже лучше не поддерживать официальную ветку «разработка». Скорее, разветвите все функции от главного и создайте объединенные выпуски после определения выпуска.
3. Среды
Не совмещайте ветки git с вашей средой, за исключением production == master. Ветвь 'развития' должна считаться сломанной. Ветви релизов отправляются в тестовые среды, будь то среда QA или промежуточная среда. Если вам нужно, отправьте конкретную ветвь функции в среду.
Если у вас есть более одной ветви функций, которую нужно выпускать отдельно, но в то же время тестировать ..... ¯ \ _ (ツ) _ / ¯ .... раскрутить другой сервер? Может быть, объединить их в одноразовую ветку ... зафиксировать исправления / изменения в исходных ветках и заново объединить в одноразовую ветку; сделать окончательное утверждение и UAT по отдельным веткам релиза.
4. Удаление неподтвержденных функций из ветки
Это то, чего пытаются избежать вышеупомянутые мысли, потому что это, без сомнения, самая болезненная вещь, которую можно попытаться сделать. Если вам повезет, функции были объединены в вашу ветку разработки или тестирования атомарно с помощью коммитов слияния. Если вам не повезло, разработчики посвятили себя непосредственно ветке разработки / тестирования.
В любом случае, если вы готовитесь к отпуску и имеете несанкционированные изменения, вы должны будете использовать Git , чтобы вернуться из этих неутвержденных коммитов из ветви выпуска; Лучше всего сделать это перед тестированием релиза.
Удачи.
источник
Вот идея, прекратить использование веток релиза. Вместо этого начните встраивать переключатели функций и управлять ими через конфигурацию. Таким образом, вы всегда объединяете ветви функций в master, и никогда не должно возникать вопроса о том, какая версия находится в тесте или в prod. Если у вас есть вопрос о том, какие функции / реализации активны в среде, просто проверьте файл конфигурации.
источник
Это должно быть простым вопросом координации между тестированием и производством. Если вы используете ветви функций в Git, просто прекратите отправку завершенных ветвей функций в Test во время цикла тестирования и возобновите работу после завершения тестирования.
Если вам нужен лучший контроль, чем этот, разделите Test на сервер разработки и сервер Acceptance Testing и координируйте те ветви, которые будут отправлены на сервер Acceptance Testing с группой тестирования. Кто-то может быть ответственным за запуск окончательного развертывания от приемочного тестирования до производства.
источник
Работа накапливается
Это универсальная проблема в моем опыте. Я обращаюсь к этому с:
источник
ветви
Вам нужно несколько веток, чтобы контролировать этот процесс:
1234-user-crud
,1235-bug-delete-catalog
и т.д. Определите ваши коммиты с номером задания тоже, это поможет вам много , когда у вас есть проблемы в слияниях (вы будете).release
ветке.Смотрите поток мерзавцев:
Среды
Очень просто:
Разработчики работают на его машине, каждый из которых использует свою собственную базу данных. Если это невозможно, у каждого разработчика есть отдельная база данных (из-за лицензий, размера базы данных и т. Д.), У вас будет много проблем с разделением базы данных между разработчиками: когда кто-то удаляет столбец или таблицу в своей ветке, другие ветви по-прежнему учитываются с этим столбцом / таблицей в базе данных.
Проблемы
Самая большая проблема в этом процессе - слияния.
Вам нужно переделать те же слияния в
test
иrelease
. Это будет больно, если в коде будет сделан хороший рефакторинг, такой как удаление класса, методы перемещения / переименования и т. Д. Поскольку вы не можете получить код изtest
(илиrelease
) ветви в ветвь функции, коммиты слияния могут быть разрешены только вtest
(илиrelease
). Таким образом, вы в конечном итоге решения те же конфликты в двух различных отраслях, возможно производить различный код в каждом слиянии и, в будущем, вы обнаружите , что тестовая команда будет необходимо протестировать возможности дважды: вtest
иrelease
ветви, потому что каждый слияния может привести к различным ошибкам.Другая проблема -
test
ветка. Вам нужно время от времени «перерабатывать» эту ветку (удалять и создавать новуюmaster
), потому что некоторые старые ветви (или старые слияния, слитые ветви, которые были удалены) могут принести много проблем для нового кода, сильно расходится с тем, что вmaster
. В этот момент вам нужен контроль над тем, какие ветви вы бы хотели снова объединить вtest
.Действительно лучшим решением является то, что бизнес-команда знает, что нужно сделать в следующей версии, и все работают в уникальной ветке (ветке разработки). Для них полезно иметь возможность выбрать, какую «готовую» функцию они хотели бы видеть в следующей версии в любое время (я думаю, что это ваш сценарий), но это кошмар для разработчиков и (я считаю) для тестовая команда.
источник
Похоже, вы объединяете изменения из вашей ветви интеграции в вашу производственную ветку, что IMHO не очень хорошая практика, именно по причинам, которые вы упомянули. Как только производственная ветвь для определенного выпуска извлекается из основной ветки интеграции, ветвь интеграции может в любой момент расходиться (в конце концов, она должна эволюционировать в следующую версию). Слияние ветки интеграции с текущей веткой выпуска может привести к изменениям, несовместимым с этой версией.
ИМХО правильный процесс будет:
источник
Лично это звучит так, как будто это проблема процесса, а не проблемы с инструментами. Несколько вещей, которые я бы предложил здесь:
Честно говоря, я думаю, что самой большой вещью будет дисциплина в отношении того, когда вы выполняете, и сколько задач вы действительно можете полностью выполнить за определенный период времени.
Подводя итог: доставляйте в QA только тогда, когда вы закончите тестирование и поставку старых функций.
источник
Когда «все проверено и одобрено», разверните то, что было проверено и одобрено для производства. Это может быть определенный коммит или конкретный артефакт сборки, сгенерированный Дженкинсом.
Не должно иметь значения, что последующие коммиты в той же ветке еще не проверены.
источник