2012-05-23 34 views
2

我在詹金斯運行多個作業,他們都在同一回購協議,但在不同的文件中工作,但有時似乎有推動競爭時出現錯誤。運行多個詹金斯作業訪問/提交相同的回購時git併發性錯誤

這發生在兩個作業(或多個)同時運行時。他們從github回購,然後不同的文件是每個工作的變化,當是時候推動和另一個工作推動之前,然後第二個工作,它將最終推出問題。爲了解決這種競爭條件,我在提交之前做了'git pull',然後我再次'git pull'以防萬一另一份工作在那段時間更新了repo,然後我運行'git push',但有時候還會推出另一份工作我可以推動造成這種推失敗

有沒有辦法只告訴git推單個文件? (我相信不是,但可能是我錯了)或有人遇到這種情況,並有一個很好的方法來避免這種競爭條件?

這是錯誤我通常會:

git push 
Error reading response length from authentication socket. 
To [email protected]:<my repo>.git 
! [rejected]  master -> master (non-fast-forward) 
error: failed to push some refs to '[email protected]:<my repo>.git' 
To prevent you from losing history, non-fast-forward updates were rejected 
Merge the remote changes before pushing again. See the 'Note about 
fast-forwards' section of 'git push --help' for details. 

謝謝!

回答

0

首先,如果您的CI系統提交併推送到git存儲庫,則可能是做錯了。但是,也許你有一個非常非常好的理由去做。

解決此問題的唯一方法是阻止提交併推送的作業同時運行。你可以通過使用像https://wiki.jenkins-ci.org/display/JENKINS/Throttle+Concurrent+Builds+Plugin這樣的插件或創建一個只有1個執行程序的從站,並限制這些作業僅在該從站上運行。

+0

爲什麼你說我不應該承諾,並從詹金斯推?我這樣做是因爲jenkins正在構建我的軟件包,並且我在某種程度上增加了版本號,因此下次運行或任何其他需要了解最新版本的工作都可以通過回購獲得。 – Gerardo

+0

如果你需要版本號,你有兩個不需要Jenkins提交的好選擇:1)來自git的輸出描述或2)Jenkins自己的內部版本號,可以從$ BUILD_NUMBER環境變量中獲得。讓Jenkins提交的麻煩是:1)您需要授予Jenkins推送權限,以及2)最終可能會有一個無限制的構建循環,其中由Jenkins推動觸發新構建。 – sti