2013-12-13 3 views
3

Мне интересно, возможно ли работать над проектом maven на нескольких ветвях функций одновременно и избегать постоянной перезаписи артефактов, созданных другими ветвями функций в Nexus.Функциональная разработка с Sonatype Nexus OSS

Я работаю в многонациональном проекте, который использует рабочий процесс gitflow для разработки нескольких компонентов (30+). Для каждого компонента существует репозиторий git, поэтому рабочий процесс gitflow применяется к каждому компоненту. Таким образом, каждый компонент имеет развитые и несколько ветвей функций. В общем, каждый компонент создавал по крайней мере один артефакт, идентифицированный его GAV.

Допустим, у нас есть компоненты А (с функцией ветвь имеет/A-Foo и функцию/A-бар) и В (с функцией функции филиала/B-обув)

Component A: 
A:develop 
A:feature/A-foo 
A:feature/A-bar 

Component B: 
B:develop 
B:feature/B-foo 

A: функция/A-foo и B: функция/B-foo работают по одной теме и должны обмениваться версиями моментальных снимков, чтобы проверить их взаимодействие (например, клиент/сервер). Компонент A и B могут обменивать артефакты только через Nexus (исходный код другого компонента недоступен). Таким образом, функция A: feature/A-foo должна развернуть свои артефакты моментальных снимков, чтобы сделать ее доступной для функции B: feature/B-foo и наоборот.

НО, когда функция A: feature/A-bar (которая работает по совершенно другой теме) развертывается впоследствии, она «перезаписывает» артефакты моментальных снимков в Nexus из-за того же GAV и более поздней метки времени и функции B: feature/B- foo импортирует неправильные артефакты в следующей сборке.

Одно из решений состоит в расширении ВДС с названием функции (например, Foo):

some.company.componentA-1.2.3-foo.jar 
some.company.componentA-1.2.3-bar.jar 
some.company.componentB-3.2.1-foo.jar 

Таким образом, вы можете избежать этого A: функция/A-Foo является перезапись артефактов A: функция/B -bar, потому что у них разные GAV. Но это очень подвержено ошибкам (переименование GAV при разветвлении и переименование его при слиянии на разработку снова, если кто-то забывает переименовать его, это испортит сборку).

Есть ли лучшее решение? Или должно быть запрещено развертывать на ветке функций?

+2

Возможный дубликат [Как постоянно создавать и развертывать ветки функций с Maven?] (Http://stackoverflow.com/questions/11413624/how-to-continuously-build-and-deploy-feature-branches-with- maven) –

ответ

3

Разветвления функций не должны быть долговечными, и поэтому во многих случаях вы вообще не развертываете. Однако, если вы хотите развернуть (и это хорошо), лучшим вариантом будет отборочный отладчик в строке версии. Если вы автоматизируете создание ветвей со сценарием, который заботится об изменениях версии, это не то, что подвержено ошибкам вообще, и на самом деле хорошая здравомыслие вашей общей стратегии. Добавьте в специальное задание CI (или несколько из них) и, возможно, используйте плагин Versions Maven, и вы должны быть готовы к рулону.

+0

Я определил два разных типа работы в Дженкинсе. Один для непрерывной сборки (прослушивание ветвей функции/*) и один для ночной сборки (прослушивание исключительно на ветке разработки). В общем случае работа по непрерывной сборке не разворачивает артефакты, создаваемые на ветке признаков; развертывается только ветка разработки. Но в некоторых случаях вам нужно развернуть SNAPSHOTS в ветви функции. Адаптация номера версии оказалась работающей, но для меня это не было убедительным решением. Но, очевидно, лучшего решения нет. Что вы подразумеваете под «использованием Версии Maven plugin»? – beaker

+1

Версии Maven Plugin можно использовать в скрипте, чтобы установить версию для чего-то другого во всем проекте с несколькими модулями за одну команду. Вы можете автоматизировать изменение номера версии, чтобы с легкостью добавить название ветки. –

Смежные вопросы