AWS CodeDeploy agent安装阶段错误删除非目标环境文件夹问题求助
我们的部署架构较为特殊:代码仓库托管在Azure Devops使用git管理,云服务采用AWS架构,体系内同时包含AWS Lambda函数,以及运行在EC2实例上的控制台应用、Web应用和Windows服务,目前已为三类应用全部搭建了CI/CD流水线,其中EC2实例上的应用采用AWS CodeDeploy完成部署,其余部署流程均正常,仅单条Windows服务部署流程存在异常。
另一个特殊配置是我们的开发(DEV)和测试(QA)环境部署在同一台EC2实例上:该实例上运行的CodeDeploy agent拉取部署包后会先解压、读取appspec.yml文件、执行安装前脚本完成现有安装包备份、关停占用相关文件的服务,之后在安装阶段更新指定环境的文件,同时会尝试删除另一个环境文件夹内的全部文件。
举例来说,运行DEV环境部署时,程序会替换DEV文件夹内的文件,同时尝试删除QA文件夹内的文件。我已排查所有脚本和yaml配置,未发现任何引用对端环境的配置,确认不是脚本逻辑问题。
当前部署的应用为Windows服务,正常情况下会触发另一个环境文件夹内文件的Ruby Permission denied @ unlink_internal 报错;我曾做测试在安装前脚本中关停另一个环境的服务,最终CodeDeploy agent确实清空了非目标环境的文件夹,仅完成了目标环境的文件更新。
相关配置信息
所有项目均为.NET项目,解决方案内ConfigFiles文件夹下按环境分设子目录,流水线yaml文件中会运行脚本根据构建对应的git分支选择正确文件打包进部署归档包。

文件选择脚本代码如下:
Azure流水线YAML文件如下:
安装前脚本如下:
最后是appspec.yml文件,CodeDeploy agent会根据该文件确认安装阶段的文件更新路径,我已核查部署归档包内的环境专属配置值全部正确。
恳请各位帮忙排查问题原因,不胜感激。
内容的提问来源于stack exchange,提问作者Mike K.

