2016-07-07 141 views

回答

-3

你必須git的URL存儲你的父母工作內外的參數傳遞給孩子相

,或者你可以簡單地克隆項目上你的根的工作和工作的形式存在。

使用https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin其詹金斯git的插件

+2

這是更多的自由職位比多分支管道。 – BitwiseMan

+0

這就是我如何與詹金斯工作 – CodeWizard

+1

同意,自由式工作你描述的是正確的。但多分支管道工作方式不同。由於該問題僅限於多分支管道作業,因此您的答案不適用。 – BitwiseMan

11

你是正確的,scm對象確實有你需要的信息。

當使用git作爲管道項目(或多分支管道項目)中的源代碼管理時,scm全局變量將是GitSCM的實例。這意味着`scm.getUserRemoteConfigs()'將返回一個UserRemoteConfig實例列表。那些實例有git remote的名字,url和refspec。您可以迭代該列表來查找匹配的遠程,或者只要確定只有一個url,就可以獲取第一個。

def scmUrl = scm.getUserRemoteConfigs()[0].getUrl() 

  • RejectedAccessException - 的getUserRemoteConfigsgetUrl方法都將拋出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) 
    ]" 
    
+0

謝謝,這正是我所尋找的。 –

+3

你的回答也讓我意識到,通過解析''''.git/config'''文件可以得到URL。 這有避免RejectedAccessException問題的好處,但增加了構建腳本的複雜性。 –

+0

jenkins從哪裏獲取https網址? 'git remote -v'按預期輸出SSH URL。我很失望像子模塊更新這樣的微不足道的事情需要巨大的解決方法。多分支管道不會準備好黃金時段... – andsens

8

在由@BitwiseMan回答評論的鼓舞下,我已經找到了(哈克)的方式來獲取URL無RejectedAccessException:

checkout scm 
def url = sh(returnStdout: true, script: 'git config remote.origin.url').trim() 

請注意,它必須在checkout scm之後完成。基本上,你必須在簽出git存儲庫(即其中有.git/config文件)

+0

這工作。在我的情況下,我使用這個來避免在maven項目的pom.xml中配置url。我會說,以這種方式自動發現網址比在maven項目中維護url(如果它是錯誤的話可能會導致混淆錯誤)嚴格得多。 – drrob