我想獲得一個預構建合併工作在多分支管道內,我想避免必須在我的管道腳本中對git url進行硬編碼。如何獲取Jenkins管道或多分支管道內的SCM URL?
似乎scm步驟必須以某種方式存儲網址,但我無法弄清楚如何訪問它。
我想獲得一個預構建合併工作在多分支管道內,我想避免必須在我的管道腳本中對git url進行硬編碼。如何獲取Jenkins管道或多分支管道內的SCM URL?
似乎scm步驟必須以某種方式存儲網址,但我無法弄清楚如何訪問它。
你必須git的URL存儲你的父母工作內外的參數傳遞給孩子相
,或者你可以簡單地克隆項目上你的根的工作和工作的形式存在。
使用https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin其詹金斯git的插件
你是正確的,scm
對象確實有你需要的信息。
當使用git作爲管道項目(或多分支管道項目)中的源代碼管理時,scm
全局變量將是GitSCM的實例。這意味着`scm.getUserRemoteConfigs()'將返回一個UserRemoteConfig實例列表。那些實例有git remote的名字,url和refspec。您可以迭代該列表來查找匹配的遠程,或者只要確定只有一個url,就可以獲取第一個。
def scmUrl = scm.getUserRemoteConfigs()[0].getUrl()
RejectedAccessException - 的getUserRemoteConfigs
和getUrl
方法都將拋出org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException
直到您手動批准他們,在 「管理詹金斯 - >在處理腳本審批」。我發現這樣做的唯一方法是嘗試運行腳本,讓它拋出一個訪問異常,批准導致該異常的一個方法,並對每個方法重複,直到不再有訪問異常拋出。令人高興的是,該設置是服務器範圍內的,因此您只需要爲每個jenkins控制器執行一次該操作,而不是每個管道工作。
GitHub的 - 當用GitHub的 -sourced多分支管道檢測,getUserRemoteConfigs
返回了兩個UserRemoteConfig情況下,一個定期分支機構,另一個用於引入請求。這些URL具有相同的URL,所以沒有什麼大不了的,但需要牢記。例如,在一個項目中使用基於HTTPS連接:
echo scm.getUserRemoteConfigs()
"[
+refs/heads/*:refs/remotes/origin/* => https://github.com/bitwiseman/project.git (origin),
+refs/pull/*/head:refs/remotes/origin/pr/* => https://github.com/bitwiseman/project.git (origin)
]"
謝謝,這正是我所尋找的。 –
你的回答也讓我意識到,通過解析''''.git/config'''文件可以得到URL。 這有避免RejectedAccessException問題的好處,但增加了構建腳本的複雜性。 –
jenkins從哪裏獲取https網址? 'git remote -v'按預期輸出SSH URL。我很失望像子模塊更新這樣的微不足道的事情需要巨大的解決方法。多分支管道不會準備好黃金時段... – andsens
在由@BitwiseMan回答評論的鼓舞下,我已經找到了(哈克)的方式來獲取URL無RejectedAccessException:
checkout scm
def url = sh(returnStdout: true, script: 'git config remote.origin.url').trim()
請注意,它必須在checkout scm
之後完成。基本上,你必須在簽出git存儲庫(即其中有.git/config
文件)
這工作。在我的情況下,我使用這個來避免在maven項目的pom.xml中配置url。我會說,以這種方式自動發現網址比在maven項目中維護url(如果它是錯誤的話可能會導致混淆錯誤)嚴格得多。 – drrob
這是更多的自由職位比多分支管道。 – BitwiseMan
這就是我如何與詹金斯工作 – CodeWizard
同意,自由式工作你描述的是正確的。但多分支管道工作方式不同。由於該問題僅限於多分支管道作業,因此您的答案不適用。 – BitwiseMan