簡體   English   中英

AWS CodeDeploy 代理在安裝過程中刪除錯誤文件夾中的文件

[英]AWS CodeDeploy agent is deleting files in the wrong folder during install

我們有一個不尋常的設置。 我們將 Azure Devops 上的 git 用於我們的代碼存儲庫,並將 AWS 用於我們基於雲的服務。 在我們的武器庫中,我們混合使用了 AWS Lambda 函數,以及在 EC2 實例上運行的控制台應用程序、Web 應用程序和 Windows 服務。 我們已經能夠為所有三類應用程序創建 CI/CD 管道。 對於在 EC2 實例上運行的應用程序,我們使用 AWS CodeDeploy。 這些部署更復雜,但它們都有效——除了一個。

我們設置的另一個不尋常之處是我們的開發和 QA 環境都在同一個 EC2 實例上。 當在該實例上運行的 CodeDeploy 代理檢索部署檔案時,它會解壓縮它,讀取 appspec.yml 文件,運行我們的安裝前腳本,該腳本備份現有安裝並關閉可能使用這些文件的任何服務。 然后,安裝階段更新指定環境中的文件,然后刪除——或嘗試刪除——其他環境文件夾中的所有文件。

換句話說,如果 DEV 部署正在運行,它會替換 DEV 文件夾中的文件,並嘗試刪除 QA 文件夾中的文件。 我知道這聽起來像是一個腳本問題,但我已經檢查了所有腳本和 yaml 文件,我沒有在哪里引用相反的環境。

在這種情況下,應用程序是 Windows 服務。 通常,我在另一個文件夾中的文件上收到 Ruby“權限被拒絕@unlink_internal”錯誤。 作為實驗,我在安裝前的腳本中關閉了其他環境中的服務,正如我所料,代理刪除了其他環境中的所有文件。 它更新了目標環境中的文件,但將另一個環境中的文件夾留空!

這是我的文件。 我懷疑,問題是由我所做的事情引起的,但我終究無法找到它。

這些都是.NET 項目。 在我的解決方案中,我有一個 ConfigFiles 文件夾,其中為每個環境設置了子文件夾。 然后,在我的管道 yaml 文件中,我運行一個腳本來根據正在構建的 git 分支選擇正確的文件以移動到存檔中。

在此處輸入圖像描述

這是選擇正確文件的腳本的代碼。

在此處輸入圖像描述

這是 Azure 管道 YAML 文件。

在此處輸入圖像描述

這是我之前的安裝腳本:

在此處輸入圖像描述

最后,這是我的 appspec.yml 文件,CodeDeploy 代理使用它來了解在安裝過程中在哪里更新文件。 我多么希望這是錯誤的路徑,但在部署檔案中,環境特定值都是完全正確的。

在此處輸入圖像描述

對此有任何想法將不勝感激。

我遇到了同樣的問題,即部署一個應用程序意外地從另一個文件夾中的另一個應用程序中刪除文件。 我的解決方案是為每個應用程序使用不同的部署組,即使它們部署到同一個 EC2 實例。

使用相同的部署組在同一 EC2 實例上部署多個應用程序會導致刪除其他已部署項目的文件/文件夾。

來自 AWS 技術支持:

原因是每次對部署組進行部署時,codedeploy 在目錄 '/opt/codedeploy-agent/deployment-root/deployment-instructions' 中創建一個格式為 '[deployment group 1 ID]_cleanup' 的清理文件並且此文件刪除了之前部署到部署組期間安裝的所有文件。由於部署組在您的情況下是相同的,因此當您對部署組進行部署時,部署組會將文件安裝到文件夾“/var /www/project1”,之前部署在文件夾“/var/www/project2”中安裝的文件正在清理,反之亦然,這是 codedeploy 代理的預期機制。

您可以在此處找到說明: https ://docs.aws.amazon.com/codedeploy/latest/userguide/codedeploy-agent.html#codedeploy-agent-install-files

請考慮創建兩個不同的應用程序/部署組並將兩個管道配置為使用不同的應用程序/部署組,這應該可以解決您的問題。

暫無
暫無

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

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