AWS CodeDeploy如何避免部署时删除.gitignore中的文件?
解决CodeDeploy部署时删除.gitignore排除文件的问题
这绝对是CodeDeploy部署WordPress这类站点时的高频需求,完全不用退回到SFTP手动更新!咱们直接来解决核心问题:
问题根源
你遇到的文件被删除情况,大概率是因为部署配置里的文件存在行为设置成了CLEAR——这个选项会删除目标目录中所有不在GitHub仓库(应用包)里的文件,正好命中了你排除的wp-config.php和wp-content/uploads。
解决方案:调整文件存在行为
CodeDeploy提供了明确的配置项来控制部署时对现有文件的处理,有两个设置渠道,后者优先级更高:
1. 通过CodeDeploy控制台修改部署组配置
- 打开CodeDeploy控制台,找到你的目标部署组
- 点击「编辑部署组」,滚动到Deployment settings区域
- 找到「File exists behavior」下拉菜单,选择以下两个符合你需求的选项之一:
OVERWRITE:覆盖目标目录中与仓库同名的文件,同时保留所有不在仓库里的文件(完美匹配你的需求:仅更新仓库内容,保留本地自定义文件)RETAIN:不覆盖任何已存在的文件,仅添加仓库里有但目标目录没有的新文件(适合不想覆盖本地修改过的文件场景)
- 保存部署组配置,重新触发部署即可
2. 通过appspec.yml显式指定(推荐)
为了确保部署行为不受控制台配置变更影响,建议在项目根目录的appspec.yml中直接定义文件处理规则,示例配置如下:
version: 0.0 os: linux # 根据你的EC2系统调整,比如windows files: - source: / # 仓库根目录 destination: /var/www/html # 你的EC2站点根目录 file_exists_behavior: OVERWRITE # 关键配置,替换成RETAIN可满足不同需求
这个配置会告诉CodeDeploy:将仓库内容同步到目标目录,覆盖同名文件,但绝不删除任何不在仓库里的文件。
额外提醒
- 如果之前用了
CLEAR选项导致文件被删除,先手动恢复wp-config.php和uploads目录,再调整配置重新部署 - 对于
wp-config.php这类敏感配置文件,更安全的做法是通过AWS Systems Manager参数存储来管理,部署时通过appspec的hooks脚本拉取配置,避免直接放在服务器上(不过这是进阶优化,当前配置已经能解决你的核心问题)
内容的提问来源于stack exchange,提问作者Keith Pickering
相关产品推荐
相关产品推荐

