groovy – 使用Jenkins Job-DSL配置块将自定义步骤放在特定位置

使用job-dsl-plugin我试图编写以前手动配置的相当数量的Jenkins作业的配置.

这些作业中的一种有多个步骤,包括使用XShell插件的一对,这不是job-dsl直接支持的.但是,我应该能够通过使用自定义“配置”块来解决这个问题.

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语法是否将第二个块插入“最后一个孩子;可以使用Job-DSL或Groovy XMLParser专家给我一个关于如何匹配和插入任意位置的指针< builders>的孩子?

(我很欣赏我可以使用job(类型: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')
    }
  }
}

相关文章

背景:    8月29日,凌晨4点左右,某服务告警,其中一个...
https://support.smartbear.comeadyapi/docs/soapui/steps/g...
有几个选项可用于执行自定义JMeter脚本并扩展基线JMeter功能...
Scala和Java为静态语言,Groovy为动态语言Scala:函数式编程,...
出处:https://www.jianshu.com/p/ce6f8a1f66f4一、一些内部...
在运行groovy的junit方法时,报了这个错误:java.lang.Excep...