一千萬個為什麽

搜索

從構建內部確定SCM觸發器的URL



我的Jenkins受到已知的Jenkins 錯誤的影響,它會觸發工作如果對共享庫進行了更改,則會設置SCM輪詢。我不能擁有這個,所以我想我會從作業中獲取觸發器信息,如果URL來自庫repo,我會中止構建。事實證明這是非常困難的。

這不起作用......

println ("Cause: " + currentBuild.causes[0])

要麽

print currentBuild.rawBuild.getCause(hudson.triggers.SCMTrigger$SCMTriggerCause)

要麽

def causes = currentBuild.rawBuild.getCauses()
f要麽(cause in causes) {
    print cause
}

第一個例子barfs

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: unclassified field org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper causes
    at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.unclassifiedField(SandboxInterceptor.java:397)
    at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:381)

但是不允許我在腳本安全頁面上將其列入白名單。

最後2個打印的東西 [email protected] 但似乎我唯一能做的就是調用 getShortDescription()並打印啟動者SCM更改

如果您知道如何打印有關SCM觸發器的更多信息,例如URL,請分享=)。

轉載註明原文: 從構建內部確定SCM觸發器的URL

一共有 2 個回答:

不幸的是我不得不禁用Groovy沙箱因為我遇到了很多情況下,我想在我的工作中使用的方法在腳本安全頁面上看起來不適用於白名單。您可以使用全局共享庫,因為全局共享庫在沙箱中自動列入白名單。 (共享庫方法起初對我很有用,但最終我遇到了一些情況,我覺得我寫的代碼不適合共享庫,所以我只是禁用了沙盒,因為它從來沒有提供任何好處無論如何。正如警告一樣,在單租戶情況下禁用沙箱通常很好,但在多租戶Jenkins實例中則不行。)

至於你的代碼,不幸的是 SCMTriggerCause 似乎沒有任何屬性指向SCM源的實際URL(我無法確認這一點,因為我沒有在我的Jenkins實例上使用SCM輪詢)。相反,你可以嘗試這樣的事情:

currentBuild.rawBuild.changeSets.collect { it.browser.repoUrl }

最近,我使用了這段代碼片段(這是位於'vars /'目錄中的常規groovy腳本的一部分)來獲取管道項目配置中設置的項目URL。希望這可以幫助。

scm.getUserRemoteConfigs()[0].getUrl()

僅供參考,它不希望發生任何SCM操作。

有關詳細信息,請參閱此 SO 線程。

希望,我沒有違反devops stackexchange基本規則,並引用堆棧溢出。