我们设置了CodePipeline,它使用CodeDeploy将GitHub上我们的存储库中的最新更新部署到EC2实例。这样可以正常工作,除了一个问题:每当执行部署时,我们.gitignore
文件中的所有内容都将从服务器中删除。
例如,这是一个WordPress网站,因此我们从存储库中排除了wp-config.php
和wp-content/uploads
。部署运行时,会删除这些文件,导致站点无法使用。
我们希望的行为是CodeDeploy覆盖现有文件,但也忽略存储库中未包含的任何文件/目录,以便它们保持不变。默认情况下,似乎有一个步骤在添加新文件之前“清除”部署目标,但我们需要跳过它。
是否有任何设置,无论是在控制台还是appspec.yml
,这将允许我们进行部署而不删除任何内容?看起来这将是一个非常常见的用例...如果我们不能进行这样的部署,那么我将不得不通过SFTP进行所有更新,这非常蹩脚。
答案 0 :(得分:0)
我们有一个WordPress实现,并假设CodeDeploy将删除所有文件并用部署包替换它们。这是它的标准行为,我很确定你无法改变它。它希望将本地文件系统与您提供的部署包同步。
因此,请考虑将上传目录移到文档根目录之外以解决此问题。查看https://premium.wpmudev.org/blog/change-default-wordpress-uploads-folder/
关于文件,我们将上传文件夹移动到/ var / files,并将其作为EFS卷安装。这为您提供了更好的持久性,并使文件系统独立于任何给定的实例。
此外,您应该将所有文件(例如wp-config.php)签入到repo中,原因相同 - 如果您不包含它,那么它将不会被部署。
通过这种方法,我们可以通过自动调整轻松替换实例。您目前可能只有一个实例,但在某些时候您需要扩展。
但要直接回答这个问题:
是的,可以配置CodeDeploy,以便按照您的需要保留文件。
您将实现一个生命周期钩子脚本,其中beforeInstall
将保留的文件移动到/ tmp,然后afterinstall
钩子将它们移回。部署的额外开销,这就是我建议采用上述方法的原因。
请参阅https://docs.aws.amazon.com/codedeploy/latest/userguide/reference-appspec-file-example.html