使用Jenkins Job-DSL Configure模块将自定义步骤放置在特定位置

埃德·兰德尔

我正在尝试使用job-dsl-plugin编写大量以前手动配置的Jenkins作业的配置脚本。

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

使用http://job-dsl.herokuapp.com/上的“ Job DSL游乐场”,我已经了解到:

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')
        }
      }        
    }
  }
}

如果我仅包括第一个configure块,那么我会在第一步位置得到第一个命令。但是,在存在第二个(最后一个)configure块的情况下,"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)但实际上我还需要一些其他的东西,而纯粹的maven工作是无法做到的。)谢谢!preBuildStepspostBuildSteps

达斯皮克

您可以使用<<运算符来追加节点,否则将替换具有相同名称的现有节点。有关详细信息,请参见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')
    }
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Jenkins Job DSL:在作业步骤中在groovyScript中使用参数

使用Jenkins Job DSL推送标签

使用Jenkins Job DSL在Jenkins中使用Artifactory配置作业

从Jenkins Pipeline调用Job DSL

Jenkins Job DSL 不带参数

如何在Jenkins Job DSL中使用带有条件步骤的foreach

Job DSL Configure块可在Jenkins Job中配置声纳属性

如何在Jenkins中使用Job DSL插件删除脚本?

如何使用Job DSL配置Jenkins GitHubPullRequestBuilder插件

Jenkins:使用Job Dsl为github组织配置分支发现

Jenkins Job DSL sshAgent无法正常工作

指向git repo作为jenkins job dsl job的来源?

在Job DSL上使用文件功能

将Jenkins xml配置为基于Groovy的Jenkins Job DSL

等同于Jenkins DSL或Jenkins Job Builder的Teamcity?

Jenkins Job DSL配置服务器,节点,插件等

如何在Jenkins Job DSL中设置内部名称?

Groovy斜杠运算符(Jenkins job-dsl)

Jenkins Job DSL触发器已弃用

如何在Jenkins Job DSL插件的上下文中使用共享/通用的常规方法

使用Jenkins中的job DSL插件在子文件夹中创建列表视图

使用Jenkins Job DSL为Git插件设置“轮询忽略某些路径中的提交”

使用带有Jenkins Job DSL插件错误的Grape下载依赖项

在Job DSL插件中定义MultiJob条件步骤的语法

使用Job-DSL配置Jenkin的SonarQube部分

使用命名参数的自定义jenkins声明性管道dsl

Jenkins Job DSL Script 用于创建文件夹创建作业

如何在Jenkins Job DSL Groovy脚本中设置监视器视图的作业顺序?

Jenkins Job Dsl for Bitbucket分支源插件文档,带有完整示例?