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

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

jenkins
execution
parallel
Теги: #<Tag:0x00007fedbfece578> #<Tag:0x00007fedbfece3e8> #<Tag:0x00007fedbfece230>

#1

Всем привет

Нужен совет по работе с дженкинсом.

Что есть:
1 несколько проектов, для каждого из которых есть джоба с тестами (можно запускать, смотреть результаты - все как обычно)
2 есть общая джоба, которая по очереди запускает все джобы из пункта 1 (типа регресс по всем проектам).

Что хотелось бы:
Запуск общей джобы занимает относительно много времени из-за последовательного выполения подджоб. Подскажите, можно ли на уровне дженкинса распараллелить их запуск и что для этого лучше использовать?

Спасибо


(Ярослав Орёл) #2

Мы пользуемся данным плагином для такого рода задач https://wiki.jenkins.io/display/JENKINS/Multijob+Plugin
Из минусов, придется создавать общую джобу с нуля


(Сергей Кузьмин) #3

я слышал что
https://jenkins.io/blog/2017/09/25/declarative-1/ это шаг в правильно направлении по сравнениб с freestyle jenkins jobs умеет это - к сожелению на изучение соотвествующих api не хватает пока времени…


(Evgeny Matuzov) #4

https://wiki.jenkins.io/display/JENKINS/Pipeline+Plugin

Создаем новую джобу типа “Pipeline”
Далее пример Scripted Pipeline, вписывается скрипт внизу джобы:

node('master') {  // выполняется на основной ноде
    currentBuild.displayName = "${BUILD_TIMESTAMP}" //название билда
    currentBuild.result = 'SUCCESS'    // в другом месте скрипта можно заменить на 'FAILURE' чтобы весь пайп считался заваленным
    wrap([$class: 'TimestamperBuildWrapper']) {   //чтобы видеть время выполнения в консоли
        stage('test'){ // название стадии, внутри блока parralel не должно быть stage
            parallel parallelTask1: {  //название паралельного выполнение чтобы различать в отчете
            	build job: 'test-job-name1', parameters: [string(name: 'PARAM_NAME1', value: 'some value'),
            											  booleanParam(name: 'bool_PARAM_NAME', value: true)]
            }, parallelTask2: {
            	build job: 'test-job-name2', parameters: [string(name: 'PARAM_NAME1', value: 'some value'),
            											  booleanParam(name: 'bool_PARAM_NAME', value: true)]
            }
        }
        stage('printenv'){
        	sh 'printenv'  // печатаем в консоль доступные переменные окружения
    	}
    }
}

Генератор скрипта, шаги доступны в зависимости от установленных плагинов:
http://вашДженкинсСервер/view/НазваниеВида/job/НазваниеДжобы/pipeline-syntax/

Описание переменных доступных в пайпах:
http://вашДженкинсСервер/view/НазваниеВида/job/НазваниеДжобы/pipeline-syntax/globals

Скрипты пишутся на groovy, запускаются через песочницу, так что много методов стандартных не доступно, все можно обойти понизив безопасность Jenkins.
Пайплайны это вся соль Дженкинса, видение разработчиков в том что в будущем все джобы будут писатся на них =)
Будет время отвечу на вопросы.


(Сергей Кузьмин) #5

я имел в виду для плагин провайдеров чтобы служба медом не казалась - переписать провайдер чтобы от поддерживал pipelines это достаточно много работы становиться org.jenkinsci.plugins.workflow.steps.Step