繁体   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