В сценарии развертывания мне нужно создать и запустить задачу jenkins в списке хостов, то есть создать что-то вроде параметризованной задачи (где ip-адрес является параметром) или задачи Multijob Plugin с осью HOST, но выполняется только двумя параллельными параллельными для нескольких хостов.
Один из вариантов может состоять в том, чтобы запускать доступный со списком хостов, но я хотел бы видеть статус на каждом хосте отдельно и повторно запускать работу jenkins, если это необходимо.
Основной вариант - использовать плагин DSL для работы или Pipeline Plugin, но здесь мне нужна помощь, чтобы понять, какие классы/методы кода dsl groovy должны использоваться для достижения этого.
Может ли кто-нибудь помочь с этим?
Задача Jenkins для удаленных хостов
Ответ 1
Предположим, что хосты уже настроены как подчиненные Jenkins.
Предположим, что хосты предоставлены в параметре задания трубопровода
HOSTS
как список, разделенный пробелами. В следующем примере вам нужно начать:
def hosts_pairs = HOSTS.split().collate(2)
for (pair in host_pairs) {
def branches = [:]
for (h in pair) {
def host = h // fresh variable per iteration; it will be mutated
branches[host] = {
stage(host) {
node(host) {
// do the actual job here, e.g.
// execute a shell script
sh "echo hello world"
}
}
}
}
parallel branches
}
Ответ 2
Комбинация Матричный проект и Плагин параллельной сборки для дросселей возможно.
Все, что вам нужно, - настроить одну определяемую пользователем ось (например, "targetHost" ) со всеми IP-адресами в качестве значений и установить требуемое регулирование в разделе "Совлокальные сборки с дроссельной заслонкой" (обратите внимание, что вам необходимо включить "Выполнять параллельные сборки" строит, если необходимо "вариант, чтобы сказать jenkins разрешить параллельное выполнение).
Значения оси доступны во время каждой дочерней сборки в соответствующей переменной среды (например, targetHost
).
Ниже приведен пример config.xml с простым шагом сборки ping & wait:
<?xml version='1.0' encoding='UTF-8'?>
<matrix-project plugin="[email protected]">
<actions/>
<description></description>
<keepDependencies>false</keepDependencies>
<properties>
<hudson.plugins.throttleconcurrents.ThrottleJobProperty plugin="[email protected]">
<maxConcurrentPerNode>2</maxConcurrentPerNode>
<maxConcurrentTotal>2</maxConcurrentTotal>
<categories class="java.util.concurrent.CopyOnWriteArrayList"/>
<throttleEnabled>true</throttleEnabled>
<throttleOption>project</throttleOption>
<limitOneJobWithMatchingParams>false</limitOneJobWithMatchingParams>
<matrixOptions>
<throttleMatrixBuilds>true</throttleMatrixBuilds>
<throttleMatrixConfigurations>true</throttleMatrixConfigurations>
</matrixOptions>
<paramsToUseForLimit></paramsToUseForLimit>
</hudson.plugins.throttleconcurrents.ThrottleJobProperty>
</properties>
<scm class="hudson.scm.NullSCM"/>
<canRoam>true</canRoam>
<disabled>false</disabled>
<blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
<blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
<triggers/>
<concurrentBuild>true</concurrentBuild>
<axes>
<hudson.matrix.TextAxis>
<name>targetHost</name>
<values>
<string>127.0.0.1</string>
<string>127.0.0.2</string>
<string>127.0.0.3</string>
<string>127.0.0.4</string>
<string>127.0.0.5</string>
</values>
</hudson.matrix.TextAxis>
</axes>
<builders>
<hudson.tasks.Shell>
<command>sleep 7
ping -c 7 $targetHost
sleep 7</command>
</hudson.tasks.Shell>
</builders>
<publishers/>
<buildWrappers/>
<executionStrategy class="hudson.matrix.DefaultMatrixExecutionStrategyImpl">
<runSequentially>false</runSequentially>
</executionStrategy>
</matrix-project>
Удачи!