gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:31:01 25 4
gpt4 key购买 nike

在 Jenkins 中构建后,我需要在构建电子邮件通知中添加计划的下一个构建时间。

触发器可以是“Build periodically ”或“Poll SCM ”,或者任何有计划时间的东西。

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

<triggers>
<hudson.triggers.SCMTrigger>
<spec>8 */2 * * 1-5</spec>
<ignorePostCommitHooks>false</ignorePostCommitHooks>
</hudson.triggers.SCMTrigger>
</triggers>

而且我还知道如何使用 config.xml 文件中的自定义脚本获取触发器类型和规范,并计算下一次构建时间。

我想知道 Jenkins 是否有 API 可以开箱即用地公开这些信息。我已经进行了搜索,但没有找到任何东西。

最佳答案

我意识到您可能不再需要这方面的帮助,但我只需要解决同样的问题,所以这里有一个脚本,您可以在 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()}")
}
}

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

您可以修改此脚本以获取 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()

然后你可以使用 Jenkins Script Console web API从 HTTP 客户端获取此信息。

例如,在 curl 中,您可以将脚本保存为文本文件,然后运行:
curl --data-urlencode "script=$(<./script.groovy)" <YOUR SERVER>/scriptText

如果 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"
}
}

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

关于jenkins - 如何以编程方式获取Jenkins中的触发器信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43918823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com