使用 Jenkins Job-DSL 配置块以将自定义步骤放置在特定位置
Using Jenkins Job-DSL Configure block to place custom steps in particular positions
使用 job-dsl-plugin 我正在尝试编写大量 Jenkins 作业的配置脚本,这些作业以前是手动配置的。
这些作业中的一种有多个步骤,包括几个使用 XShell 插件的步骤,这不受 job-dsl 直接支持。但是我应该能够通过使用自定义 "configure" 块来解决这个问题。
在 http://job-dsl.herokuapp.com/ 使用 "Job DSL playground" 我已经达到了:
job {
name 'my-job'
jdk('JDK-17')
steps {
configure { node ->
node / builders {
'hudson.plugins.xshell.XShellBuilder'(plugin: 'xshell@0.9') {
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: 'xshell@0.9') {
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='xshell@0.9'>
<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='xshell@0.9'>
<commandLine>run-me-as-the-last-build-step</commandLine>
<executeFromWorkingDir>true</executeFromWorkingDir>
</hudson.plugins.xshell.XShellBuilder>
</builders>
...
</project>
我想不出 Groovy XML / Job-DSL 语法来插入第二个块作为“最后一个 child; 可以 Job-DSL或者Groovy XMLParser高手指点一下如何在<builders>
的children的任意位置匹配插入?
(我很高兴我可以将 job(type:Maven)
与 preBuildSteps
和 postBuildSteps
一起使用,但实际上我还需要其他一些东西,而纯粹的 maven 工作则排除了这些东西。)
谢谢!
您可以使用 <<
运算符附加节点,否则将替换具有相同名称的现有节点。有关详细信息,请参阅 Job DSL wiki。
job {
name('foo')
steps {
shell('echo AAA')
}
configure {
it / builders << 'hudson.plugins.xshell.XShellBuilder' {
commandLine('123')
}
}
steps {
shell('echo BBB')
}
configure {
it / builders << 'hudson.plugins.xshell.XShellBuilder' {
commandLine('456')
}
}
}
使用 job-dsl-plugin 我正在尝试编写大量 Jenkins 作业的配置脚本,这些作业以前是手动配置的。
这些作业中的一种有多个步骤,包括几个使用 XShell 插件的步骤,这不受 job-dsl 直接支持。但是我应该能够通过使用自定义 "configure" 块来解决这个问题。
在 http://job-dsl.herokuapp.com/ 使用 "Job DSL playground" 我已经达到了:
job {
name 'my-job'
jdk('JDK-17')
steps {
configure { node ->
node / builders {
'hudson.plugins.xshell.XShellBuilder'(plugin: 'xshell@0.9') {
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: 'xshell@0.9') {
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='xshell@0.9'>
<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='xshell@0.9'>
<commandLine>run-me-as-the-last-build-step</commandLine>
<executeFromWorkingDir>true</executeFromWorkingDir>
</hudson.plugins.xshell.XShellBuilder>
</builders>
...
</project>
我想不出 Groovy XML / Job-DSL 语法来插入第二个块作为“最后一个 child; 可以 Job-DSL或者Groovy XMLParser高手指点一下如何在<builders>
的children的任意位置匹配插入?
(我很高兴我可以将 job(type:Maven)
与 preBuildSteps
和 postBuildSteps
一起使用,但实际上我还需要其他一些东西,而纯粹的 maven 工作则排除了这些东西。)
谢谢!
您可以使用 <<
运算符附加节点,否则将替换具有相同名称的现有节点。有关详细信息,请参阅 Job DSL wiki。
job {
name('foo')
steps {
shell('echo AAA')
}
configure {
it / builders << 'hudson.plugins.xshell.XShellBuilder' {
commandLine('123')
}
}
steps {
shell('echo BBB')
}
configure {
it / builders << 'hudson.plugins.xshell.XShellBuilder' {
commandLine('456')
}
}
}