Как настроить мультиконфигурацию сборки и тестирования 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

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

2 ответа

Решение

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

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

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

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

Другие вопросы по тегам