0

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

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

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

4

3 回答 3

1

您可以构建作业并将其配置为禁用

job('example') {
    disabled()
}

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

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

于 2016-03-24T23:23:47.353 回答
0

对我有用的是:

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

例如像这样:

将其放入 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 {
    }
  }
}
于 2016-03-25T16:30:40.180 回答
0

如果要确保 DSL 有效,请编写一些单元测试。您可以在此处此处查看一些示例。特别是这个测试会告诉你,如果一切都可以毫无问题地生成。如果您想在本地生成它们以测试构建本身是否完成,您可以在 SeedJob 生成所有配置后使用系统 groovy 脚本来禁用所有自动触发器。是有关如何执行此操作的示例。

于 2016-03-29T08:55:09.200 回答