Уникальное назначение отображения Xvfb для нескольких одновременных заданий Jenkins

У меня есть задание потока сборки в Jenkins, которое может выполнять параллельные сборки. Каждая сборка в одном работающем экземпляре задания может выполнять несколько тестов пользовательского интерфейса, где каждый набор тестов должен запускаться на уникальном порту Xvfb. Я использую плагин Xvfb.

Концептуально это:

Job1 and Job2 are 2 concurrent instance of a Build Flow job. There could be more.
Each of Job1 and Job2 can have concurrent running children, 
each of which is a Free Flow job that configures the Xvfb in it.

Job1 -------------| -Test set 1 (test_a, test_b etc. on Xvfb port 1) -> free flow instance 1@Job1
                  |
                  | -Test Set 2 (test_x, test_y etc. on Xvfb port 2) -> free flow instance 2@Job1
                  |
                  | -Test Set 3 (test_p, test_q etc. on Xvfb port 3) -> free flow instance 3@Job1
                  |
                  | -Test Set 4 (test_m, test_n etc. on Xvfb port 4) -> free flow instance 4@Job1

Job2 -------------| -Test set 1 (test_s, test_t etc. on Xvfb port 5) -> free flow instance 1@Job2
                  |
                  | -Test Set 2 (test_d, test_e etc. on Xvfb port 6) -> free flow instance 2@Job2
                  |
                  | -Test Set 3 (test_j, test_k etc. on Xvfb port 7) -> free flow instance 3@Job2

Конфигурация Xvfb выглядит следующим образом: Конфигурация Xvfb в тестовом рабочем задании

Я сталкиваюсь с множеством коллизий портов и проблем, когда он выдает ошибки, которые говорят:

_XSERVTransSocketINETCreateListener: ...SocketCreateListener() failed
20:51:06 _XSERVTransMakeAllCOTSServerListeners: server already running

Может кто-нибудь сказать мне, как я могу настроить Xvfb так, чтобы каждый запущенный экземпляр задания занимал уникальный дисплей / экран.

Чтобы упростить и подвести итог, скажем, у меня есть простое задание Jenkins, которое использует порт дисплея Xvfb для запуска. И задание может выполняться одновременно несколькими экземплярами. Как можно обеспечить, чтобы каждый из параллельных экземпляров работал на уникальном дисплее Xvfb?

1 ответ

Немного опоздал на вечеринку, но столкнулся с этим вопросом при настройке моих рабочих мест Jenkins Xvfb. Решение в моем случае состояло в том, чтобы добавить флаг времени выполнения

xvfb-run -a

Это будет продолжать пытаться отображать порты, пока не найдет свободный. Вы можете прочитать больше здесь. Так что попробуйте добавить флаг в Xvfb additional options поле плагина.

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