В сценарии развертывания мне нужно создать и запустить задачу jenkins для списка хостов, т.е. создать что-то вроде параметризованной задачи (где ip-адрес является параметром) или задачу на Multijob Plugin с осью HOST, но запускается только двумя параллельно на нескольких хостах.
Одним из вариантов может быть запуск ansible со списком хостов, но я хотел бы видеть статус для каждого хоста отдельно и при необходимости перезапускать задание jenkins.
< br /> Основной вариант - использовать плагин Job DSL или Pipeline Plugin, но здесь мне нужна помощь, чтобы понять, какие классы / методы кода dsl groovy следует использовать для этого.
Кто-нибудь может с этим помочь?
Задача Jenkins для удаленных хостов
Ответы (2)
Предположим, что хосты уже настроены как ведомые устройства 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
}
HOSTS="foo bar baz qux"
, после split()
у вас будет плоский список ["foo", "bar", "baz", "qux"]
, а после collate(2)
у вас будет список списков [["foo", "bar"], ["baz", "quz"]]
.
- person jil; 11.10.2016
Комбинация проекта матрицы и Возможен плагин Throttle Concurrent Builds.
Все, что вам нужно, это настроить одну определяемую пользователем ось (например, "targetHost") со всеми IP-адресами в качестве значений и установить желаемое регулирование в разделе "Ограничение одновременных сборок" (обратите внимание, что вы должны включить "Выполнять параллельные сборки, если необходимо "возможность сообщить Дженкинсу о разрешении одновременного выполнения).
Значения оси доступны во время каждой дочерней сборки в соответствующей переменной среды (например, 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>
Удачи!