【问题标题】:CodeDeploy configuration to overwrite files覆盖文件的 CodeDeploy 配置
【发布时间】:2019-07-02 10:00:42
【问题描述】:

我正在通过CodeDeploy/etc/logstash/ 的目标实例中部署logstash 配置。

这是 3 阶段 CodePipeline 中的最后一步。

但是它失败并显示消息

部署失败,因为此位置已存在指定文件:/etc/logstash/pipelines.yml

如何指示CodeDeploy 覆盖文件?

【问题讨论】:

标签: amazon-web-services aws-code-deploy aws-codepipeline


【解决方案1】:

目前,我看到的唯一可以覆盖文件的方法是在创建新部署时选择覆盖或保留 as seen here。在其他任何地方都不会看到这些设置。如果我没记错的话,这是唯一的方法,因为 CLI 不支持它。

2021 年 7 月更新:看起来 AWS 终于承认了这个缺陷——看看here for updates

【讨论】:

    【解决方案2】:

    GitHub 上打开了一个添加覆盖选项的问题,并且已经存在了很长一段时间。我通过在 BeforeInstallation 钩子中添加一个自定义脚本来解决这个问题,该脚本将在复制我的新部署之前擦除所有现有文件。

    这就是我的 appspec.yml 文件的样子

    version: 0.0
    os: linux
    files:
      - source: /
        destination: /path/to/destination
    hooks:
      BeforeInstall:
        - location: DeploymentScripts/CleanupScript.sh
      AfterInstall:
        - location: DeploymentScripts/InstallScript.sh
          timeout: 600
      ApplicationStart:
        - location: DeploymentScripts/RestartScript.sh
          timeout: 3600
    

    【讨论】:

    • 这已经是可能的了,但是你必须在执行 codedeploy 的命令中启动它。您可以找到更多信息 docs.aws.amazon.com(奇怪的是在“回滚”下)cli docs.aws.amazon.com(参见--file-exists-behavior (string))
    • 我发现files: 部分中的overwrite: true 设置没有帮助。如前所述,添加一些脚本命令以删除 BeforeInstall 挂钩中的文件。例如:cd /path/to/app rm -rf *
    【解决方案3】:

    你可以在appspec.yml下传递这个属性

    文件: 覆盖:真

    【讨论】:

    • This issue 告诉我们目前不支持您的解决方案。
    猜你喜欢
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    • 2023-02-06
    相关资源
    最近更新 更多