Как оптимизировать рабочие пространства Jenkins для филиалов - PullRequest
0 голосов
/ 12 июня 2019

У нас есть проект на C ++, который контролируется в GIT.Мы используем Jenkins в качестве нашего CI, и поскольку у нас относительно большое количество ветвей в нашей системе, мы сталкиваемся с некоторыми проблемами во время сборки.Поскольку некоторые ветви содержат изменения в интерфейсе базового класса, весь проект перестраивается при переключении с одной ветви на другую.Обычно разработчику не нужно часто переключаться - но два разработчика могут работать в двух разных ветках с разными интерфейсами - и это усложняет жизнь для сборки Jenkins.

Насколько я понимаю, есть двапараметры для настройки рабочих пространств: общее рабочее пространство, заданное для всех филиалов, или различное рабочее пространство для каждой ветви.В то время как последний вариант слишком дорогой в дисковом пространстве и требует повторного наклона для каждой ветви, первый вариант заставляет перестраивать Jenkins при каждом нажатии.

Я бы хотел третий вариант: все ветви используют один и тот же набор рабочих пространств.но с расстановкой приоритетов: если в разветвленной ветке использовалось определенное рабочее пространство в ближайшем прошлом, то мы бы хотели, чтобы оно использовалось снова (для сокращения времени сборки) - если нет рабочего пространства, которое ветвь использовала последним, CIиспользуйте рабочее пространство, которое использовалось меньше всего.Таким образом, мы бы не взорвали использование диска и получили бы более приличную производительность.

Вопрос в том, существуют ли в Jenkins инструменты / плагины, которые могут позволить использовать вышеупомянутую логику использования рабочих пространств?Можно ли разработать такую ​​логику в Jenkins с помощью плагина или скрипта?

1 Ответ

0 голосов
/ 12 июня 2019

Используя шаг общей библиотеки, вы можете реализовать логику, которую вы запрашиваете для определения каталога рабочей области.Тем не менее, поскольку не все ветви необходимо создавать постоянно, я настоятельно рекомендую вам воспользоваться вторым предложением: вы можете использовать multi-branch plugin и настроить его для фильтрации ветвей в соответствии с шаблоном.Таким образом, объединенные ветви должны быть удалены, чтобы сохранить пространство (вы также можете переименовать их или удалить их Jenkinsfile.)

Если вы все еще хотите создать свой собственный механизм выделения рабочей области, вам нужно знать, как их перечислятьКак сохранить каждый каталог эксклюзивным для определенного запуска и как использовать их повторно.Рано или поздно вы обнаружите, что это не стоит вашего времени, и что вам лучше инвестировать в повторное использование артефактов из предыдущих сборок ваших веток, а не из самой сборки, так что ваш четвертый выбор:)

...