是否可以覆盖Job DSL参数?

时间:2016-03-24 18:02:02

标签: jenkins groovy jenkins-job-dsl

我们正在使用Jenkins Job DSL插件在代码中配置我们的所有作业,并且在部署更改之前经常使用本地Jenkins登台环境进行测试。我们不希望我们的大量数百个工作开始在本地构建,但我们确实希望确保DSL有效并且所有工作都正确创建。

有没有办法覆盖例如scm的{​​{1}}参数,以便在我们所有的groovy文件中本地无操作?我相信我可以编写一个自定义库文件来执行此操作,但是我必须在每个groovy文件中添加一个导入行来导入我们的自定义trigger定义,这不是理想的。 / p>

为了澄清,我正在寻找一种方法来优雅地或通过猴子修补代码来覆盖某些定义,这样我们就不必要求更改每个groovy文件和作业定义,其中有很多。

3 个答案:

答案 0 :(得分:1)

您可以构建作业并对其进行配置disabled

job('example') {
    disabled()
}

然后您可以手动激活要测试的作业。

同样的方法也适用于其他工作类型。

答案 1 :(得分:0)

对我有用的是:

  1. 根据当前主机名添加一个返回true / false的函数,具体取决于它是在生产环境还是测试环境中运行。例如。我的生产实例运行为jenkins.mydomain.com,测试jenkins为jenkins-test.mydomain.com。
  2. 根据
  3. 在作业的定义中添加if / then / else

    e.g。像这样:

    将此放入JenkinsInstance.groovy:

    import jenkins.model.*
    
    // Representing the Jenkins server instance
    class JenkinsInstance {
        // Determine if we're executing on a Jenkins production instance.
        static Boolean isProd() {
            if (Jenkins.getInstance().getRootUrl() ==~ ".*jenkins\\.mydomain\\..*") {
              return true
            } else {
              return false
            }
        }
    }
    

    你的创造就业机会DSL脚本看起来像这样

    import JenkinsInstance
    
    freeStyleJob("myjobname") {
      if (JenkinsInstance.isProd()) {
        scm {
           git {
           ...
           }
        }
      } else {
        scm {
        }
      }
    }
    

答案 2 :(得分:0)

如果您想确保DSL有效,请编写一些单元测试。您可以看到一些示例herehere。特别是this test会告诉您,是否可以在没有任何问题的情况下生成所有内容。如果你想在本地生成它们来测试构建本身是否完成,你可以在SeedJob生成所有配置后使用系统groovy脚本来禁用所有自动触发器。 Here是如何做到这一点的一个例子。