有没有办法在 AWS CodeDeploy 中排除目录?

Is there a way to exclude a directory in AWS CodeDeploy?

我们有一个来自 BitBucket 的自动部署,设置为部署到三个 EC2 实例之一。目前一切正常,除了我们的 /data 目录(包含 CMS 上传的图像、视频等)不是存储库的一部分。因此在部署期间,特定实例上的现有 /data 目录将被删除。

我发现可以使用 "exclude" 参数为文件 ownership/group 和权限设置排除项;但是,文件部分似乎不存在这样的参数:

http://docs.aws.amazon.com/codedeploy/latest/userguide/reference-appspec-file-structure-files.html

这似乎是一个常见问题,但我还没有找到解决方案。有没有人对在部署期间排除要覆盖的文件有任何建议?

此时我唯一能想到的就是手动指定要覆盖的每个目录以及 appspec.yml 中的每个根文件。这远非理想,因为每次添加新目录或根文件时都需要对其进行编辑。

您应该在部署包之外构建您的应用数据。

将应用程序数据保存在与部署包相同的目录中并不是一个好方法。

您应该可以使用权限部分的除外 属性 来实现此目的。请参阅 http://docs.aws.amazon.com/codedeploy/latest/userguide/reference-appspec-file-structure-permissions.html

如果其他人正在寻找,解决方案是通过 appspec "files" 指令手动指定每个目录 and/or 文件。这样就不会部署未包含在列表中的文件。

每当添加新目录或根文件时,都需要更新 appspec 文件。

最近我遇到了同样的问题。我需要排除一个文件,但同一目录中的文件太多,很难在 appspec 文件中指定每个文件。所以我在安装钩子之前和之后创建了两个脚本文件 运行。

before_install.sh

#!/bin/bash
mv /path/to/file/need/to/exclude/on/deployment /path/to/temp/directory/which/will/not/update/on/deploment

以上脚本将文件移动到不会在部署中更新的位置。 after_install.sh

#!/bin/bash
mv /path/to/temp/excluded/file /path/to/file/exact/location

上面的脚本放置了先前版本的排除文件 在 appspec.yaml

中添加以下行
hooks:
  BeforeInstall:
    - location: /scripts/before_install.sh
  AfterInstall:
    - location: /scripts/after_install.sh