当前位置: 首页 > 面试题库 >

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

冯阳成
2023-03-14
问题内容

我正在尝试使用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: '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')
        }
      }        
    }
  }
}

如果仅仅包含第一个configure块,则可以在第一步位置获得第一个命令。但是,在存在第二个(最后一个)configure块的情况下,"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(type:Maven),但实际上我还需要一些其他的东西,而纯粹的maven工作是无法做到的。)谢谢!
preBuildSteps``postBuildSteps


问题答案:

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


 类似资料:
  • 我的在中,我的在中 我的测试都运行正确,但是intelliJ拒绝查看步骤defs在哪里,即使我要求它创建一个新的步骤defs。这是在哪里配置的?

  • 问题内容: 我已经制作了一个自定义的nbconvert模板,并希望可以从启动实用程序的任何文件夹中对其进行访问。我应该在哪里放置模板? 我在官方文档中找不到任何内容。我已经尝试过平常的地方jupyter CONFIGS一样,,,无济于事。 到目前为止,我唯一找到的地方是python包所在的文件夹: 如果我在此处创建目录并将模板放在其中,则效果很好。但这是一个丑陋的hack,每次我更新nbconve

  • 好的,所以我正在使用IntelliJ进行一个项目,并试图利用它的cucumber功能。我没有使用过cucumber的java风格,但IntelliJ似乎希望步骤定义文件位于相对于特性文件的特定位置。 我在Intellij12和其他来源中找到了:如何定义cucumber的步骤定义位置,这些来源指出我能够添加运行配置的“glue”属性,它告诉cuke在哪个包中查找步骤文件。因此,我可以通过idea运行

  • 本文向大家介绍iOS 模拟自定义位置,包括了iOS 模拟自定义位置的使用技巧和注意事项,需要的朋友参考一下

  • 本文向大家介绍Android 自定义View步骤,包括了Android 自定义View步骤的使用技巧和注意事项,需要的朋友参考一下 例子如下:Android 自定义View 密码框 例子 1 良好的自定义View 易用,标准,开放。 一个设计良好的自定义view和其他设计良好的类很像。封装了某个具有易用性接口的功能组合,这些功能能够有效地使用CPU和内存,并且十分开放的。但是,除了开始一个设计良好

  • 我似乎无法为JPanel设置按钮的自定义位置。它总是在左上角添加按钮,然后继续向右。我还有一个背景图像,这让事情变得更加困难。框架如下所示:imageshack.com/a/img838/3240/ez6l.png我的代码是: 我想将按钮“MusicButton”添加到右下角/中间/或左侧。如果您可以在JPanel中定制JButton,请分享。谢谢