Используя плагин job-dsl-plugin, я пытаюсь настроить сценарий для большого количества заданий Jenkins, которые ранее были настроены вручную.
Один вариант этих заданий состоит из нескольких шагов, включая пару, которые используют подключаемый модуль XShell, это напрямую не поддерживается job-dsl. Однако я должен быть в состоянии обойти это, используя пользовательский блок «настроить».
Используя «Игровую площадку Job DSL» по адресу http://job-dsl.herokuapp.com/, я дошли до:
job {
name 'my-job'
jdk('JDK-17')
steps {
configure { node ->
node / builders {
'hudson.plugins.xshell.XShellBuilder'(plugin: '[email protected]') {
commandLine('run-me-as-the-first-build-step')
executeFromWorkingDir('true')
}
}
}
maven {
mavenInstallation('Default')
goals('clean')
goals('verify')
property('prop1', 'value1')
property('user.timezone', 'UTC')
mavenOpts('--batch-mode')
}
maven {
mavenInstallation('Default')
goals('deploy')
property('prop2', 'value2')
property('user.timezone', 'UTC')
mavenOpts('--batch-mode')
}
shell('shell-task')
configure { node ->
node / builders {
'hudson.plugins.xshell.XShellBuilder'(plugin: '[email protected]') {
commandLine('run-me-as-the-last-build-step')
executeFromWorkingDir('true')
}
}
}
}
}
Если я просто включу только первый блок конфигурации, я получу первую команду в позиции первого шага. Но при наличии второго (последнего) блока конфигурации "node / builders"
снова сопоставляется с первым элементом и перезаписывает его, поэтому run-me-as-the-last-step
является первым и единственным XShellBuilder. Результат, который я ищу, будет выглядеть примерно так:
<project>
...
<builders>
<hudson.plugins.xshell.XShellBuilder plugin='[email protected]'>
<commandLine>run-me-as-the-first-build-step</commandLine>
<executeFromWorkingDir>true</executeFromWorkingDir>
</hudson.plugins.xshell.XShellBuilder>
<hudson.tasks.Maven>
<targets>clean verify</targets>
<properties>prop1=value1
user.timezone=UTC</properties>
<mavenName>Default</mavenName>
<jvmOptions>--batch-mode</jvmOptions>
<usePrivateRepository>false</usePrivateRepository>
</hudson.tasks.Maven>
<hudson.tasks.Maven>
<targets>deploy</targets>
<properties>prop2=value2
user.timezone=UTC</properties>
<mavenName>Default</mavenName>
<jvmOptions>--batch-mode</jvmOptions>
<usePrivateRepository>false</usePrivateRepository>
</hudson.tasks.Maven>
<hudson.tasks.Shell>
<command>shell-task</command>
</hudson.tasks.Shell>
<hudson.plugins.xshell.XShellBuilder plugin='[email protected]'>
<commandLine>run-me-as-the-last-build-step</commandLine>
<executeFromWorkingDir>true</executeFromWorkingDir>
</hudson.plugins.xshell.XShellBuilder>
</builders>
...
</project>
Я не могу понять синтаксис Groovy XML/Job-DSL для вставки этого второго блока в качестве «последнего потомка». Может ли эксперт по Job-DSL или Groovy XMLParser дать мне указатель на то, как сопоставлять и вставлять в произвольную позицию в дети <builders>
?
(Я ценю, что я мог бы использовать job(type:Maven)
с preBuildSteps
и postBuildSteps
, но на самом деле мне нужно еще несколько вещей, которые исключаются чистой работой maven.) Спасибо!