Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Параллельный запуск джоб в CI Jenkins без копирования джоб

jenkins
infrastructure
execution
parallel
Теги: #<Tag:0x00007fedbab83cd8> #<Tag:0x00007fedbab83b48> #<Tag:0x00007fedbab838a0> #<Tag:0x00007fedbab83760>

(Eugene Moskalenko) #1

Всем привет, подскажите пожалуйста, как вы решаете такую проблему, в континиус (в частности Jenkins).

Скажем, есть:

  • одна джоба, которая смотрит в тестовый энваирмент
  • одна джоба, которая смотрит в пред-прод энваирмент
  • одна джоба, которая смотрит в прод энваирмент

Как сделать так, что любую из этих джоб можно было запустить нескольким пользователям одновременно и тесты не пересекались?

Допустим:

  • на тестовом энваирменте - запускают 2-а QA
  • на пред-проде запускает - 1-ин QA, и 2 разработчика, также был сделан коммит, в следствии чего запустилась джоба

Это надо наплодить каждой джобы (для каждой джобы свои пользователи в базе данных) и на травить их на разные тестовые стенды? К примеру:

Пред-продовские:

Тестовые:

Или как такое делается на практике? Если есть киньте пожалуйста почитать, везде только как настраивать Jenkins, но с этим у меня проблем особо нет…

Спасибо :slight_smile:


(Mykhailo Poliarush) #2

я думаю в можно сделать:

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

Или в п.1. можно сделать одну параметризированную джобу, где будет выбираться енвиронмент и источник тестовых данных.


(Eugene Moskalenko) #3

вот как раз вот это походу и самое сложное - “дальше надо обеспечить максимально независимый запуск автоматизации, т.е. чтобы ресурсы, логи, репорты и т.д. использовались в изоляции для одного запуска”. Как вы у себя такое реализовуете?


(Ray Romanov) #4

Это обеспечивает сам Jenkins, если поставить флаг в задании “Разрешить параллельный запуск задачи”, то для каждой параллели создается свой личный воркспейс на время выполнения.


(Eugene Moskalenko) #5

А как же тогда быть с тем, ведь каждый такой паралельный запуск смотрит на один тестовый стенд, следовательно в одну базу. Так или иначе они будут зависимы при паралельном запуске


(Mykhailo Poliarush) #6

Надо использовать генерацию данных каждый раз и не использовать никакие зависимости на тестовые данные с тестового стенда.


(Ramon Menezes) #7

самый главный вопрос, если использовать одну джобу на все случаи жизни, как тогда отслеживать стабильность сборок и результаты предыдущих сборок на тех же енвах ?
сделайте по джобе на каждый кейс, они то бесплатные в Дженкинсе :wink:


#8

А можно поподробнее? Какой смысл запускать ту же самую джобу (с того же самого бранча, те же тесты, тот же environment)? [quote=“evgmoskalenko, post:1, topic:15575”]
на тестовом энваирменте - запускают 2-а QA
[/quote]


(Eugene Moskalenko) #9

Дак выше же писал, может не правильно выразился или не так поняли, ссори :slight_smile:

Чтобы параллельно проверили разные люди. И экзекьютор не ждал пока выполнится предыдущий тест.

все, кроме набора тестов - может быть одинаковым :slight_smile: Кто-то скажем хочет выполнить одну пачку тестов, кто-то другую. В разное время эти пачки тестов могут меняться у разных экзекьютеров (поэтому выносить в сьюты смысла нет). А еще при этом надо допустим кому-то и сьюты запускать и ждать пока закончится тест прошлых экзекьютеров.

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

Но скажем если в это же время из этих же тестов кто-то (5 разных человек) хочет запускать свои какие-то пачки тестов -Dtest=test1, test2, test 555, то мне надо создать пять параметризированных джоб а хотелось бы одну :slight_smile:

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


(vmaximv) #10

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


(Eugene Moskalenko) #11

Этих разных человек еще даже нет, все это пока в моей голове. Я как создатель всей этой инфраструктуры - не хочу, чтобы копировались джобы. Копирование джоб - это потом будет адский треш из таких джоб. А проект в итоге может быть не один, а 10 и уровни тестирования могут быть разными: интеграционные тесты, системные.

При одном подходе сложно разгребать, при другом подходе, клонируется куча джоб, которые так или иначе надо как-то поддерживать. Изменяя хаб или что еще придется потом редактировать всю эту кучу. Вот собственно из-за этого я и интересуюсь, как делают другие люди.

Мне нравится подход, когда не надо ничего разгребать, одну джобу можно запускать паралельно 100 раз и при этом не сложно понять по отчетам кто и когда запускал и что запускал. Скажем есть одна параметризированная джоба, которую могут запускать многие (там можно запустить пачку разных тестов с разных веток), и отдельная джоба на разные сьюты и одна джоба на ветку мастер и одна джоба на предрелизную ветку. И отдельная джоба на TestRail, с которого также параметризировано можно запускать разным экзекьюторам, при этом все отчеты упадут в нужный тест-ран тест-рейла.

Вот идеальный вариант в моей голове, как мне кажется это должно быть.


(vmaximv) #12

вам уже все ответили в данной теме. но вы по прежнему пишите много букв. есть схема в голове - реализуйте.