我知道你可能不再需要這方面的幫助,但我不得不解決同樣的問題,所以這裏是一個腳本,你可以在詹金斯控制檯使用輸出所有觸發器的配置:
#!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的表達式)以及post-commit掛鉤是否被設置爲忽略。
您可以修改此腳本來獲取數據,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 --data-urlencode "script=$(<./script.groovy)" <YOUR SERVER>/scriptText
如果詹金斯使用基本身份驗證,則可以提供與-u <USERNAME>:<PASSWORD>
參數。
最終,請求會導致這樣的事情:
{
"Build Project 1": {
"spec": "H/30 * * * *",
"ignorePostCommitHooks": "false"
},
"Test Something": {
"spec": "@hourly",
"ignorePostCommitHooks": "false"
},
"Deploy ABC": {
"spec": "H/20 * * * *",
"ignorePostCommitHooks": "false"
}
}
你應該能夠調整這些例子,以滿足您的具體使用情況。看起來你不需要遠程訪問它,而只是從一份工作中獲得,但是我還包含了遠程部分,因爲它可能適合其他人使用。
我以前有類似的想法,但我放棄了,因爲我無法從一臺從機運行系統groovy腳本,並且構建環境受到嚴格控制。 – Heinz
在我的公司,我在最終用戶和腳本控制檯API之間建立了一個額外的層。有一個系統可以存儲這樣的Groovy腳本,它們由管理員批准,並且有一個Web API允許用戶通過該系統執行它們(腳本的內容被抽象化)。在Jenkins管道中,用戶可以通過HTTP請求觸發該中間API,例如使用以下命令:https://wiki.jenkins.io/display/JENKINS/HTTP+Request+Plugin。維護這樣的工具肯定會帶來一些開銷,但是這是值得的,因爲實施它一直是一次性努力。 – JohnSomeone