使用 max_revisions 值限制代码部署修订不起作用

Limiting Code Deploy revisions with max_revisions value is not working

我试图通过编辑 codedeployagent.yml 文件的 max_revisions 值来限制在 EC2 实例上保留的成功代码部署修订的数量。我目前已将值设置为 :max_revisions: 2.

我认为我遇到的问题是由于我设置文件值的方法造成的。我试图通过使用代码部署包部署它来设置值。为此,我在以下位置本地创建了一个自定义 codedeployagent.yml 文件:

etc/codedeploy-agent/conf/codedeployagent.yml

在我的 appspec.yml 文件中,我通过以下行指定该文件的安装位置:

- source: etc/codedeploy-agent/conf/codedeployagent.yml
     destination: /etc/codedeploy-agent/conf

我发现当我尝试部署时由于脚本已经到位而出错。为了解决这个问题,我添加了一个脚本,该脚本与 BeforeInstall 挂钩,我的 appspec.yml 将在安装软件包之前删除该脚本:

#!/bin/bash
sudo rm /etc/codedeploy-agent/conf/codedeployagent.yml

好的,所以在这之后我已经 ssh 进入服务器并且果然, :max_revisions: 2 值设置为预期的。不幸的是,在实践中,我看到的修改比 ec2 个实例中仅保留的两个要多得多。

所以,回到我问题的开头……显然,此解决方法不是更新 codedeployagent.yml 文件的最佳方法。我应该补充一点,我正在部署到一个自动缩放组,所以这需要一个可以存在于部署脚本或云形成模板中的解决方案,而不是仅仅登录和硬编码值。有了所有这些信息,我在这里缺少什么?如何正确限制修订?谢谢。

您可以尝试以下方法之一。

  1. 获取您已将 max_revisions 修改为 2 的实例的 AMI,并使用此 AMI 更新 ASG 的启动配置,以便横向扩展实例也将具有此配置。
  2. 在创建启动配置时将此配置添加到您的用户数据部分 在用户数据部分添加的命令

      "UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [ 
      "#!/bin/bash -xe\n",
      "# Delete last line and add new line \n",
      "sed '$ d' /etc/codedeploy-agent/conf/codedeployagent.yml > /etc/codedeploy-agent/conf/temp.yml\n",
      "echo ':max_revisions: 2' >> /etc/codedeploy-agent/conf/temp.yml\n",
      "rm -f /etc/codedeploy-agent/conf/codedeployagent.yml\n",
      "mv /etc/codedeploy-agent/conf/temp.yml /etc/codedeploy-agent/conf/codedeployagent.yml\n",
      "service codedeploy-agent restart\n"
      ]]}}
    

根据 reference,max_revisions 适用于每个部署组的应用程序。所以它只在 /opt/codedeploy-agent/deployment-root/<deployment_group_id>/ 下保留 2 个修订版。如果 ASG 与多个应用程序关联,codedeploy 将在其 deployment_group_id 目录中存储每个应用程序的 2 个修订版。

更新配置文件后是否重启了代理?在您重新启动代理之前,任何新配置都不会起作用。