2016-07-28 13 views
0

У нас есть много разработчиков, работающих над проектом в Git. Сейчас мы развиваемся в отдельных отраслях, и тестирование проводится на этих филиалах. Проблема заключается в том, когда мы интегрируем эти ветви обратно освоить некоторые новые вопросы ползучести Причины:.Как управлять выпуском, чтобы минимизировать проблемы интеграции?

  1. Объединить и разрешения конфликтов вопросы.
  2. Это звучит далеко, но происходит слишком часто, что ошибка, обнаруженная в одной ветке, может быть захвачена испытанием, проведенным в другой ветке. Поэтому его можно было бы избежать.
  3. В нашей установке главная ветвь всегда доступна для пользователей для бета-тестирования. Поскольку мы интегрируем назад к мастеру довольно поздно в цикле выпуска, мы не получаем достаточного количества бета-тестирования.

В последнее время, что мы пытались:

Как только новая ветка объединяются в мастере мы объединить его обратно на отдельные ветви, пытаясь сохранить отрасли, как близко освоить, как это возможно. Это сводит к минимуму, но не решает проблему из-за этих двух причин -

  1. Ее возможно, что отрасль, которая вызвала проблему фактически слиты в последний день релиза или позже в цикле.

  2. Багги-филиал, так как он был объединен довольно поздно в цикле, также не получает никакого покрытия в бета-тестировании (мастер - ветвь бета-тестирования).

Какую наилучшую практику мы используем для минимизации этой проблемы? У меня есть это решение:

  1. Мы создаем следующую ветвь «освобождения» в начале цикла выпуска. Таким образом, мы создаем филиал релиза в понедельник, когда пятница является датой выпуска.
  2. Мы завершаем тестирование в отдельных филиалах и объединяем все, чтобы быть выпущенными изменениями в этой ветви «выпуска».
  3. Мы даем эту ветку «релиз» для бета-тестирования, а также продолжаем наши интеграционные тесты в этой отрасли.
  4. Если все в порядке, мы сливаемся обратно с этой ветви на мастер. Поэтому мы поддерживаем одну ветвь выпуска и мастер.

Это задерживает выпуск по количеству дней, которые мы решаем для тестирования интеграции, но, по-видимому, более дисциплинирован. Поскольку эта проблема не нова, пожалуйста, дайте свои предложения или укажите мне правильные рекомендации по этому вопросу.

ответ

1

1) Merge конфликты

Если это вообще возможно, работа над отдельными файлами. Если это не так, вам, вероятно, придется иметь дело с конфликтами. Есть некоторые трюки, связанные с ними, которые некоторые разработчики не знают. Например, предположим, что вы получаете конфликт слияния в файле A. Предположим, что вам нужна ваша версия файла A, а не master (это очень часто). Затем вы можете сказать git checkout HEAD -- /path/to/fileA. Затем добавьте/зафиксируйте. Это заставит git использовать измененный файл as-is, а не master. И наоборот, если вы хотите версию мастера, вы можете сделать git checkout master -- /path/to/fileA, предполагая, что ваш местный мастер обновлен. Или вы можете просто выбрать любой файл из любой ветки с помощью этого метода: он довольно общий и очень удобен время от времени.

2) В терминах «сливаться ошибок», вот как мы обрабатываем его:

Мы используем Jenkins/Bitbucket в наших непрерывных инструментов интеграции, и они, кажется, хорошо работают вместе. У нас есть аналогичная модель разработки для вас, мы отключаемся от мастера, а затем снова объединяем функции. Однако мы не получаем этих «ошибок» от слияния, потому что мы заставляем Дженкинса «подделывать слияние для освоения» и затем запустите все модульные тесты на «поддельное слияние для мастеринга», прежде чем нам будет разрешено даже объединить запрос pull в master. Это действительно устраняет ошибки интеграции. Если у вас нет инструментов для этого, вам нужно быть очень сложным, чтобы объединить мастера и выполнить все ваши тесты перед слиянием. Это боль в прикладе: я предлагаю сделать Дженкинс или какой-нибудь другой автоматизированный инструмент CI для вас.

3) ветви релиз

Это может быть хорошей практикой. Однако мы их не реализуем. Вы можете обнаружить, что вы быстро превращаетесь в «git secretary», реализуя их. Мы никогда их не пробовали, поэтому мне трудно сказать, хорошая ли это идея, но это аргумент, который я слышал от них от людей, которые их пробовали (слухи, я знаю).

HTH. Удачи вам в релизе.

+0

Спасибо. Для точки 3) я также против идеи наводнения системы со слишком большим количеством ветвей релиза. Я думаю, что мы должны поддерживать только одну ветвь релиза и один мастер (отредактированный в вопросе), чтобы минимизировать накладные расходы. Кому-то в настоящее время все равно нужно объединить все, чтобы справиться с тем, чтобы другая релизная ветвь не могла показаться слишком переполненной. – user2645830

+0

Также в GIT конфликты слияния разрешаются при поднятии запроса на перенос, а не при фактическом слиянии, поэтому его не так много накладных расходов. – user2645830

2

Вот как я бы делать это:

  1. Создать ветку проекта. Это сейчас мастер в отношении проекта.
  2. Каждый разработчик создает свою собственную ветку из ветви проекта для работы.
  3. Протестируйте все работы, выполненные в ветке разработчика, перед тем, как слияние с проектом. Слияние с проектной ветвью осуществляется в два этапа:

    Этап 1 REBASE отдел разработчика. Это объединить ветку проекта в ветку разработчика. Устранить все проблемы и испытания, чтобы убедиться в отсутствии ошибок, вкрались в

    Примечание:. Дополнительное тестирование здесь помогает выявить новые проблемы (вводимый через слияния), вызванные интеграции работы с другими разработчиками в текущей ветке разработчиков.

    Шаг 2 Если все в порядке, объедините ветвь разработчика обратно в ветку проекта.

    Примечание: Здесь не требуется никакого тестирования, потому что ветви проекта и ветви разработчика идентичны.

  4. После того, как все разработчики завершили работу над этим циклом выпуска и успешно ПОБЫВАТЬ и объединились с ветвью проекта; проверьте ветвь проекта, чтобы убедиться, что все в порядке (регрессионные тесты).
  5. Предоставьте продукт для этого цикла выпуска. Доставка осуществляется путем РЕГИСТРАЦИИ ветки проекта, т. Е. Слияния мастера с проектом, устранения любых проблем, тестирования (снова!).

Я знаю, что это звучит как много дополнительной работы, и похоже, что кто-то должен управлять репозиторием, но если вы держите его, он становится рутинным, а активность администрации падает.Тестирование также становится более обычным в том, что каждый разработчик изучает тип тестирования, требуемый на каждом этапе, и планирует его.

Удачи вам в вашем проекте! J. Isa

2

Вы могли бы попробовать совершенно иной подход - принятие более Continuous Delivery подход означает, что все работает на мастер/багажник, и вы используете Feature Toggles скрывать в незавершенном работу с конечными пользователями.

Таким образом, у вас есть только небольшие ежедневные слияния, а не большие из них (улучшение пункт 1), и вы также более или менее решить пункты 2 и 3.

+0

Спасибо. Это полезно, и на самом деле мы все еще используем его для больших возможностей. Но он также должен сочетаться с интеграционным тестированием. – user2645830