使用 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
文件的最佳方法。我应该补充一点,我正在部署到一个自动缩放组,所以这需要一个可以存在于部署脚本或云形成模板中的解决方案,而不是仅仅登录和硬编码值。有了所有这些信息,我在这里缺少什么?如何正确限制修订?谢谢。
您可以尝试以下方法之一。
- 获取您已将
max_revisions
修改为 2
的实例的 AMI,并使用此 AMI 更新 ASG 的启动配置,以便横向扩展实例也将具有此配置。
在创建启动配置时将此配置添加到您的用户数据部分
在用户数据部分添加的命令
"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 个修订版。
更新配置文件后是否重启了代理?在您重新启动代理之前,任何新配置都不会起作用。
我试图通过编辑 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
文件的最佳方法。我应该补充一点,我正在部署到一个自动缩放组,所以这需要一个可以存在于部署脚本或云形成模板中的解决方案,而不是仅仅登录和硬编码值。有了所有这些信息,我在这里缺少什么?如何正确限制修订?谢谢。
您可以尝试以下方法之一。
- 获取您已将
max_revisions
修改为2
的实例的 AMI,并使用此 AMI 更新 ASG 的启动配置,以便横向扩展实例也将具有此配置。 在创建启动配置时将此配置添加到您的用户数据部分 在用户数据部分添加的命令
"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 个修订版。
更新配置文件后是否重启了代理?在您重新启动代理之前,任何新配置都不会起作用。