如何以编程方式获取Jenkins中的触发器信息

Hei*_*inz 5 triggers jenkins

我需要在Jenkins中构建之后添加在构建电子邮件通知中安排的下一个构建时间.

触发器可以是" Build periodically"或" Poll SCM",或任何具有计划时间的触发器.

我知道触发器信息在config.xml文件中,例如

<triggers>
    <hudson.triggers.SCMTrigger>
      <spec>8 */2 * * 1-5</spec>
      <ignorePostCommitHooks>false</ignorePostCommitHooks>
    </hudson.triggers.SCMTrigger>
  </triggers>
Run Code Online (Sandbox Code Playgroud)

我也知道如何从config.xml文件中获取自定义脚本的触发器类型和规范,并计算下一个构建时间.

我想知道Jenkins是否有API来公开这些信息.我做了搜索,但没有找到任何东西.

Joh*_*one 4

我意识到您可能不再需要这方面的帮助,但我只需要解决同样的问题,所以这里是一个您可以在 Jenkins 控制台中使用的脚本来输出所有触发器配置:

#!groovy

Jenkins.instance.getAllItems().each { it ->
  if (!(it instanceof jenkins.triggers.SCMTriggerItem)) {
    return
  }

  def itTrigger = (jenkins.triggers.SCMTriggerItem)it
  def triggers = itTrigger.getSCMTrigger()

  println("Job ${it.name}:")

  triggers.each { t->
    println("\t${t.getSpec()}")
    println("\t${t.isIgnorePostCommitHooks()}")
  }
}
Run Code Online (Sandbox Code Playgroud)

这将输出使用 SCM 配置的所有作业及其规范(有关何时运行的类似 cron 的表达式)以及是否将提交后挂钩设置为忽略。

您可以修改此脚本以获取 JSON 数据,如下所示:

#!groovy
import groovy.json.*

def result = [:]

Jenkins.instance.getAllItems().each { it ->
  if (!(it instanceof jenkins.triggers.SCMTriggerItem)) {
    return
  }

  def itTrigger = (jenkins.triggers.SCMTriggerItem)it
  def triggers = itTrigger.getSCMTrigger()

  triggers.each { t->
    def builder = new JsonBuilder()
    result[it.name] = builder {
      spec "${t.getSpec()}"
      ignorePostCommitHooks "${t.isIgnorePostCommitHooks()}"
    }
  }
}

return new JsonBuilder(result).toPrettyString()
Run Code Online (Sandbox Code Playgroud)

然后您可以使用Jenkins 脚本控制台 Web API从 HTTP 客户端获取此信息。

例如,在curl中,您可以通过将脚本保存为文本文件然后运行来完成此操作:

curl --data-urlencode "script=$(<./script.groovy)" <YOUR SERVER>/scriptText
Run Code Online (Sandbox Code Playgroud)

如果 Jenkins 使用基本身份验证,您可以使用 -u<USERNAME>:<PASSWORD>参数提供该身份验证。

最终,请求的结果将是这样的:

{
    "Build Project 1": {
        "spec": "H/30 * * * *",
        "ignorePostCommitHooks": "false"
    },
    "Test Something": {
        "spec": "@hourly",
        "ignorePostCommitHooks": "false"
    },
    "Deploy ABC": {
        "spec": "H/20 * * * *",
        "ignorePostCommitHooks": "false"
    }
}
Run Code Online (Sandbox Code Playgroud)

您应该能够定制这些示例以适合您的特定用例。看来您不需要远程访问它,而只需从工作中访问它,但我还包括了远程部分,因为它可能对其他人有用。