簡體   English   中英

當工作空間在網絡共享上時,而不是在工作空間在本地驅動器上時,如何解決git checkout失敗的Jenkins作業?

[英]How to fix Jenkins job that is failing on git checkout when workspace is on network share, but not when workspace is on local drive?

我正在構建一個服務,該服務創建將連接到Jenkins服務器的動態節點。 節點將主要用於構建許多大型代碼庫,因此我想利用增量構建的優勢。 由於節點是臨時虛擬機,在工作完成后的某個時候被銷毀,因此我需要Jenkins工作區不是計算機上的本地驅動器。

我創建了一個網絡共享,並將Jenkins節點的根目錄設置為I:\\ jenkins。 當VM聯機時,我的服務將執行將我的驅動器映射到網絡共享的命令。 然后,該服務執行命令以將該服務連接到Jenkins主服務器。 當我嘗試對節點運行構建時,嘗試進行git checkout時,它始終失敗。

作業失敗后,網絡共享具有git存儲庫中的大多數文件,因此該共享是可訪問的,並且沒有讀/寫限制,可以阻止作業運行。 我嘗試運行的任何作業都會發生此錯誤,包括使用很少文件訪問git repos的作業。

失敗的Jenkins作業中的日志輸出為:

git checkout -f ...a70f FATAL: Could not checkout ...a70f hudson.plugins.git.GitException: Could not checkout ...a70f ...<stack trace>... stderr: error: failed to read object ...f656 at offset ...1596 from .git/objects/pack/pack-...2475.pack fatal: packed object ...f656 (stored in .git/objects/pack/pack-...2475.pack) is corrupt

如果我將節點的工作空間更改為本地驅動器,然后重新連接完全相同的計算機並重新運行完全相同的作業,則不會出現故障。 Git正確克隆了我需要的一切,我的工作變得綠色。

如何解決網絡共享中出現的問題? 或者,如何滿足以下要求:

  • Jenkins節點必須在臨時VM上運行,該臨時VM可能隨時被銷毀並重新創建
  • 該工作空間必須同時對多個VM可見(作業的嚴格工作空間命名可防止多個節點讀取/寫入相同的文件)
  • 即使沒有在線的Jenkins節點,工作空間也必須持久
  • 任何聯機的新節點都必須能夠重新連接到工作空間

如果有不需要網絡共享的解決方案,我很樂意嘗試其他方法!

在這里找到了解決方案: GIT拉錯誤-遠程對象已損壞

由於某些原因,當工作區位於本地存儲中時,默認的git config值可以很好地工作。 當轉移到任何外部映射的存儲解決方案時,需要修改git config以防止

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM