Как настроить многоконфигурационную сборку и тестирование jenkins

Мне нужно построить и протестировать несколько конфигураций: Linux, OSX и Solaris. У меня есть подчиненные узлы с метками «linux», «osx» и «solaris». В каждой конфигурации я хочу (а) построить (б) запустить дымовые тесты (в) если дымовые тесты пройдены, то запустить полные тесты и, возможно, больше.

Я подумал, что ответом могут быть задания с несколькими конфигурациями, поэтому я настраиваю задание сборки с несколькими конфигурациями, и оно запускает параллельные сборки в каждой ОС. Задание сборки инициирует сборку дымового теста нижестоящего уровня, которая, в свою очередь, запускает задание полного тестирования.

Я столкнулся со следующими проблемами

  1. Если одна из конфигураций дает сбой, задание в целом завершается сбоем, и Jenkins не запускает никакие последующие задания (например, если сборка Solaris завершается сбоем, Jenkins не запускает дымовые тесты или полные тесты для osx и linux).

  2. Сборка Solaris занимает примерно в два раза больше времени, чем другие (порядка часа), и я бы предпочел, чтобы дымовые тесты Linux и OSX не ждали завершения сборки Solaris.

Означает ли это, что мне осталось вручную создать три конвейера заданий и поместить их за задание «начать все» (т. е. создать и вручную связать следующие задания)?

build-linux   smoke-test-linux   full-test-linux
build-osx     smoke-test-osx     full-test-osx
build-solaris smoke-test-solaris full-test-solaris

Я пропустил что-то очевидное?


person Peter McLain    schedule 01.07.2011    source источник


Ответы (2)


Насколько я знаю, ответ состоит в том, чтобы создать 3 матричных задания, по одному для каждой системы. Затем у них будет 3 подзадания (сборка, дымовое тестирование, полное тестирование) с заданием по сборке в качестве пробного камня.

person MOnsDaR    schedule 04.07.2011
comment
Я немного смущен этим ответом. Если есть 3 матричных задания, каковы оси для каждого из них? Здесь есть «матричная работа» == «многозадачность»? - person Dormidont; 09.10.2015

Задумывались ли вы о том, чтобы объединить сборку, дымовое тестирование и полные тесты в одно задание с несколькими конфигурациями? Помимо того, что это немного грязно, это должно сработать для вас.

Чтобы ответить на вашу первую проблему: для запуска нижестоящего задания независимо от результата используйте триггерную параметризованную сборку для запуска после завершения (всегда запускать), а затем установите флажок «сборка без параметров».

Чтобы ответить на ваш второй вопрос: либо используйте всеохватывающее многоконфигурационное (матричное) задание, либо используйте три отдельных потока заданий, как вы упомянули. ОБНОВЛЕНИЕ: вы можете запустить 3 последовательных матричных задания для каждого шага (сборка, дым-тест, полные тесты), но это будет означать, что если какой-либо из шагов сборки завершится неудачей, ни один из дымовых тестов не будет запущен.

person Lars Nordin    schedule 15.12.2011