[英]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.