Опыт работы с Hudson - Проект построения матрицы

Кто-нибудь пробовал эту функцию и имеет какие-либо отзывы? Или кто-нибудь знает некоторые полезные образцы для поиска?


person kukudas    schedule 08.01.2009    source источник


Ответы (2)


Я попробовал эту функцию несколько месяцев назад, но больше ею не пользуюсь (просто потому, что она мне не нужна, а не потому, что это не очень хорошая функция).

По сути, вы определяете n Axis, каждая ось является свойством с несколькими значениями.

Давайте рассмотрим пример: вы определяете ось «JDK» с возможным значением «1,4», «1,5», «1,6» и определяете другое свойство «база данных», где возможные значения — «oracle», «mysql».

Таким образом, Hudson запустит вашу сборку 6 раз:

  • с JDK 1.4, со свойством database=oracle (т.е. JVM запускается с параметром -Ddatabase=oracle)
  • с JDK 1.5, со свойством database=oracle
  • с JDK 1.6, со свойством database=oracle
  • с JDK 1.4, со свойством database=mysql
  • с JDK 1.5, со свойством database=mysql
  • с JDK 1.6, со свойством database=mysql

Затем, когда все будет завершено, вы сможете увидеть результаты для каждой итерации.

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

Обратите внимание, что, за исключением оси JDK, вы должны самостоятельно управлять свойством, указанным Хадсоном в качестве записи. В моем примере приложение должно учитывать само свойство «база данных». В конце концов, хорошей идеей будет использовать это свойство для включения определенного профиля в конфигурации Maven2, если ваш проект является мавенизированным (см. здесь для более подробной информации).

Надеюсь, мои объяснения достаточно ясны :)

person Romain Linsolas    schedule 08.01.2009
comment
Как получить доступ к этим свойствам для проектов, отличных от Java? Как переменные окружения? - person Sridhar Ratnakumar; 24.03.2010
comment
@Sridhar Обычно да, эти свойства устанавливаются Хадсоном как переменные среды для текущей сборки. - person Romain Linsolas; 24.03.2010
comment
ОК, срок действия этого вопроса давно истек, но у меня возникают трудности с настройкой матричного проекта - есть какие-нибудь указания о том, как его настроить? :) - person Sam Post; 03.05.2010
comment
Мне нужно использовать библиотеку Jenkins groovy для определения оси. Есть ли способ сделать это? Я хочу иметь возможность использовать такие вещи, как withCredentials, sh и т. д., для извлечения значений - person xbmono; 10.02.2021

Матричные сборки имеют ряд проблем:

  • В целом несовместим с плагинами — они улучшаются, но вам нужно постоянно обновлять их.
  • Артефакты — гораздо труднее вывернуться — URL-адреса немного более неуклюжи, найти их на FS (которого вам все равно следует избегать) теперь кошмар.

Это позор, потому что концепция очень хороша и очень удобна там, где она работает.


Редактировать

  • Невозможность запуска отдельных точек.

Обычным способом решения этой проблемы является настройка параметризованных сборок для одновременного запуска, что сопряжено со своими проблемами, но избавляет нас от множества заданий с одним и тем же кодом и разными константами.

person Danny Staple    schedule 02.06.2011
comment
У вас есть лучшее предложение? Я рассматриваю возможность использования матричной сборки, чтобы разделить наш пакет модульных тестов на несколько идентичных заданий, каждое из которых выполняет разные подмножества набора (чтобы ускорить наш тестовый цикл с наших нынешних 40 минут до ‹5 минут) - person PerilousApricot; 19.02.2012
comment
На самом деле мы используем код в шагах сборки для запуска параметризованных заданий, поэтому задание родительского кикера или планировщика запускает последующие задания. Мы используем параметр причины, чтобы связать их обратно, и параметры guid, чтобы найти задания после выхода из очереди, чтобы родительское задание могло показать все запущенные дочерние задания. Это было - одно задание параметризовано, и для их просмотра можно использовать родительский + другие инструменты создания представления. Мы также используем функцию разрешения одновременных запусков. - person Danny Staple; 29.04.2014