2017-05-11 96 views
4

我需要在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> 

,我也知道如何從config.xml文件自定義腳本觸發類型和規格,並計算未來建設時間。

我不知道詹金斯是否有API來公開這個信息的開箱即用。我已經完成了搜索,但沒有找到任何東西。

回答

1

我知道你可能不再需要這方面的幫助,但我不得不解決同樣的問題,所以這裏是一個腳本,你可以在詹金斯控制檯使用輸出所有觸發器的配置:

#!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" 
    } 
} 

你應該能夠調整這些例子,以滿足您的具體使用情況。看起來你不需要遠程訪問它,而只是從一份工作中獲得,但是我還包含了遠程部分,因爲它可能適合其他人使用。

+0

我以前有類似的想法,但我放棄了,因爲我無法從一臺從機運行系統groovy腳本,並且構建環境受到嚴格控制。 – Heinz

+0

在我的公司,我在最終用戶和腳本控制檯API之間建立了一個額外的層。有一個系統可以存儲這樣的Groovy腳本,它們由管理員批准,並且有一個Web API允許用戶通過該系統執行它們(腳本的內容被抽象化)。在Jenkins管道中,用戶可以通過HTTP請求觸發該中間API,例如使用以下命令:https://wiki.jenkins.io/display/JENKINS/HTTP+Request+Plugin。維護這樣的工具肯定會帶來一些開銷,但是這是值得的,因爲實施它一直是一次性努力。 – JohnSomeone

相關問題