AWS CodeDeploy 的 File already exists at location 理解

2017-04-11 AWS

這陣子在用 CodeDeploy 的時候,如果要 deploy 的目錄有相同的檔案都會出現 「File already exists at location」的錯誤,造成 deploy 失敗。

 

一開始因為工作時程的關係一直沒有去正視這個問題為何發生,只是應急先把目錄清空讓 Deploy 正常。

 

剛好今天在爬問題的時候突然爬到一篇文章提到了 CodeDeploy 「File already exists at location」的問題

 

發文者和我的疑問完全相同:

  • CodeDeploy 是如何處理已存在的檔案?
  • CodeDeploy 不會覆蓋或刪除已存在的檔案,造成佈署失敗
  • 如果不將已存在檔案刪除或覆蓋,CodeDeploy 如何運作才是正確?
  • 可以使用 CodeDeploy hook (BeforeInstall) 來解決這個問題,但感覺有點笨?

 

這個發文的內容完全正中我心 …

 

文中提到:

when you deploy, CodeDeploy will look for a file (on the instance) with information on previously deployed files for the application/deployment-group in question, if it finds the file it then it uses it to cleanup (delete) the existing files, preparing for copying of the new revision files.

CodeDeploy 的 deployment 的依據是已經 deployment 過的 history,

  1. 先搜尋這些檔案是否曾經 deploy 過,如果是,就刪除本地檔案,上傳新的檔案
  2. 若為否則不會刪除本地檔案,所以在 deploy 的時候就會出現「File already exists at location」的錯誤

 

也就是說 CodeDeploy 在 deploy 的依據是 history 記錄,而 Rollbacks 也是相同原理找尋上一版 deploy 的 history。

 

所以在看一些 AWS CodeDeploy 的 video 在 hooks 的 BeforeInstall 都會建議進行 Erase application data,雖然不確定為何 AWS 不直接 delete all,但或許可能有考慮的點是我目前沒有想到的。

 

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *

彙整

分類

open all | close all

License

訂閱 Mr. 沙先生 的文章

輸入你的 email 用於訂閱