2014-02-26 97 views
4

我有一個Jenkins作業,它使用Maven(mvn clean install)從github.com存儲庫的主分支構建,然後檢查Java文件中的許可證標題並丟失NOTICE文件,並在必要時添加它們(mvn license:format notice:generate)。有時這會導致更改或添加文件,有時不會。如何讓Jenkins git僅在有變更時才提交?

每當有任何更改(通過許可證插件),我想推動更改到github回購。

現在我很難找出如何最好地實現這一點。我已經添加了Maven的許可證插件後殼生成步驟在哪裏執行Git命令:

git add . # Just in case any NOTICE files have been added 
git commit -m "Added license headers" 

git add .單獨的作品,即不破壞構建,即使沒有文件已被添加。但是,如果沒有任何更改,則git commit會破壞構建。

我不關心重新推回github,因爲我相信Git Publisher構建後行動可以爲我做到這一點。有人可以指出我正確的方向爲git提交?

+0

是不是有一種方式來獲得最新的變化的時間戳? –

+0

@ratchetfreak謝謝。您的意思是在a)中保存運行許可證插件之前的時間戳,並將其與運行後的時間戳進行比較?聽起來對我來說有點貴。除非有人知道更好:)。 –

回答

1

要在任何一點停止構建破解shell構建步驟返回退出代碼1,例如,當嘗試進行git提交(儘管沒有提交任何內容)時,可以簡單地將各個命令包裝爲回顯。

echo `git add -A && git commit -m "Added license headers"` 

現在,是否有未經跟蹤的文件添加到索引或沒有,工作樹是髒或乾淨的,回聲會返回退出代碼0,因爲會有一些字符串是echo版。

4

你也可以只捕獲錯誤代碼通過OR運算符:

git commit -m "Added license headers" || echo "No changes to commit" 
+0

這也會忽略其他錯誤! – gstroup

13
git diff --quiet && git diff --staged --quiet || git commit -am 'Added license headers' 

這個命令做的是需要什麼,「混帳只要有變化犯」,而在該命令其他答案不會:他們只會忽略任何錯誤git commit

0

其更好地使用

git commit --allow-empty -a -m "Added license headers" 
+1

這將污染空提交git歷史 - 有點混淆國際海事組織。 –

+0

這實際上仍然創建一個提交_even when_有_no_更改。 – ffledgling

相關問題