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