簡體   English   中英

如何通過 Jenkinsfile 克隆到潛在的非空目錄?

[英]How do I clone into a potentially non-empty directory via Jenkinsfile?

我有一個簡單的 Jenkinsfile,它將 Git 存儲庫克隆到多個代理之一中。 這些代理可能還沒有回購,或者可能。

目前這里是 Jenkinsfile:

stage("Clone Postman Collection") {
       steps {
           sh "git clone ssh://git@bitbucket.company.com/lol/postman-scripts.git"
       }
   }

目前這在第一次克隆 repo 時有效,但如果文件夾不為空,則會導致作業失敗,並出現一個非常容易理解的錯誤: fatal: destination path 'postman-scripts' already exists and is not an empty directory.

我問這個問題而不是使用其他許多 Stack Overflow 問題中的其他答案之一的原因是,我無法確定正在運行的代理是否實際上已經克隆了 repo,所以那里需要某種IF子句之類的。

我想知道在 Jenkinsfile 中是否有一種優雅的方式來處理這個問題。 例如,我可以:

強制克隆覆蓋它找到的文件?

導致錯誤不是致命的?

捕捉到具體錯誤並刪除,重試?

強制克隆覆蓋它找到的文件?

這種思路的邏輯結論是每次都刪除工作空間或克隆。 無論如何,這樣做通常有很好的理由,其中一個更引人注目的是“您的構建過程將創建不會出現在 repo 中的工件”。

但是如果 repo 足夠大,我想你可能真的想要緩存,所以

導致錯誤不是致命的? 捕捉到具體錯誤並刪除,重試?

您已經在運行 shell 腳本,因此您可以使用 shell 構造在git clone的結果和后續步驟之間添加一些邏輯。 使用目標目錄作為克隆或獲取/簽出的標志似乎很簡單——如果目錄存在,則克隆,否則,簽出。

但我建議不要這樣做。 我敢打賭,您的存儲庫只需要幾秒鍾就可以克隆到您當前的設置中,而且您的時間比詹金斯的時間更值得。 在每次結帳時刪除 repo,您損失的很少,並獲得更簡單的運行時一致性保證。

暫無
暫無

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

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