2015-04-01 106 views
-3

我是Groovy語言的新手,正在使用它爲Jenkins作業編寫自定義參數。在下面的腳本中,第一個(「git checkout master」)和last(「git branch -r --no-merged master」)命令工作得很好。然而,由於除了我在下面評論的最初的'[git pull]'之外沒有任何輸出,所以git pull不會執行。從最後一個命令「git branch -r --no-merged master」返回的內容是不正確的,因爲我的出處在我的本地之前。git pull不能在Groovy中工作

def dir = "C:/JenkinsBuilds/WidgetLoader/Source" 
def srcDir = new File(dir) 

String command1 = "git checkout master" 
println ("[$command1]") 
Process process1 = command1.execute(null, srcDir) 
process1.waitFor() 
println(process1.text) 

String command2 = "git pull origin master" 
println ("[$command2]") // This will output 
Process process2 = command2.execute(null, srcDir) 
process2.waitFor() 
println(process2.text) // Only a blank line is outputted 

String command3 = "git branch -r --no-merged master" 
println ("[$command3]") 
Process process3 = command3.execute(null, srcDir) 
process3.waitFor() 
println(process3.text) 

def branches = ["-- SELECT BRANCH --","master"] 

process3.text.eachLine {line -> branches.add(line.trim().replaceAll('origin/', ''))} 

return branches 

這是獲取返回

[(主): [git的結帳大師] 你的分支是落後10所提交的原籍/主「,可快進。 (使用 「混帳拉」 來更新你的本地分支)

[混帳拉]

[git的分支-r --no-合併的主] 出身/ HEAD - >產地/主產地 /主 產地/ testb1 產地/ testb2

回答

0

好了,所以我發現了什麼事情感謝的代碼片段,我發現here

def command2 = "git pull" 
println ("[$command2]") 
StringBuffer sbout = new StringBuffer() 
StringBuffer sberr = new StringBuffer() 
Process process2 = command2.execute(null, srcDir) 
process2.waitForProcessOutput sbout, sberr 
def value = process2.exitValue() 
int count = sbout.toString().readLines().size() 
println "${sberr.toString()}" 
println "Exit value: $value, Err lines: ${sberr.toString().readLines().size()}, Out lines: $count" 
assert count > 1 
assert value == 0 

[GIT中拉]權限被拒絕(公鑰)。致命:無法從 遠程存儲庫讀取。

我的問題是,沒有任何異常被拋出git拉,它不是很清楚如何看看是否有任何其他錯誤。話雖如此,我還是想分享一下這段代碼,以防別人遇到類似的問題。

此權限錯誤我可以使用,並與我原來的問題沒有任何關係,所以我將此評論標記爲答案。

0

命令參數應該始終被作爲List通過。嘗試:

def command1 = ["git", "checkout", "master"] 
def command2 = ["git", "pull", "origin", "master"] 
def command3 = ["git", "branch", "-r", "--no-merged", "master"] 
+0

第一個和第三個命令可以正常工作,而不會將它們放入列表中。這似乎並不奏效。無論如何,我已經嘗試過,無論使用和不使用列表,拉仍然無法正常工作。 – Alex 2015-04-03 13:31:30

+0

Opal - 如果命令參數應該總是以List的形式傳遞,那麼請您解釋這些不使用列表的示例:http://groovy-lang.org/groovy-dev-kit.html#process-management,http:/ /www.joergm.com/2010/09/executing-shell-commands-in-groovy/,http://mrhaki.blogspot.com/2009/10/groovy-goodness-executing-string-or.html, – Alex 2015-04-03 14:25:18

+0

是,這些例子非常簡單。看來你並沒有通過groovy執行很多外部命令。 'String'的一個實例可以被執行的事實並不意味着這是正確的,並且不容易出錯。 – Opal 2015-04-07 07:37:39