我感兴趣的是了解人们如何管理代码部署以及如何将其与他们的编排系统联系起来。
我一直找不到一个能按我想要的方式工作的好的 puppet subversion 模块。假设我将我的应用服务器分成两组,A 和 B,然后以跷跷板的方式进行部署。我想象的是,有两个变量定义每个组应该使用哪个修订版本。
$groupA_svn_tag = 'myCode-1.0'
$groupB_svn_tag = 'myCode-1.0'
然后,当我想要进行部署时,我将 groupA 离线(在我的负载均衡器中)并增加标签变量。
$groupA_svn_tag = 'myCode-1.1'
$groupB_svn_tag = 'myCode-1.0'
我等待 puppet 执行其操作(svn switch myCode-1.1)并翻转平衡器并增加 groupB。
也许这是对 puppet 的误用,因为它更像是一种“保持服务器处于这种状态”的工具。我应该为此使用 mcollective 吗?其他人如何解决这个问题?
答案1
我遇到的大多数发布流程都是部署构建的工件,而不是直接从 svn 签出。然后管理就变成了选择在存储库中部署哪个版本的文件(无论是 jar、tar、rpm 等),而不是在发布构建过程中使用 svn 标签。如果我的经验普遍适用,那么也许这可能导致您尝试使用 svn 时缺乏支持?需要其他人的评论。
您所做的事情的概念是合理的,但正如所提到的。我会通过使 A 组失败,将工件“myCode-1.1.tar.gz”部署到 A 组来实现。然后对 B 组重复此操作。
即使您的存储库是 svn,您也不需要在部署过程中弄乱标签,只需在 HEAD 中查找所需的工件版本,该版本可以作为您应用于组的 puppet 清单的一部分。
答案2
我认为您的程序很好,您应该尝试使用 MCollective 来管理 Puppet 运行,并在可能的情况下将节点从平衡器中取出。我们广泛使用 SVN 来管理我们的软件和配置,并专门标记每个更改/发布,然后使用 vcsdeploy 让 Puppet 完成其工作(http://www.practicalclouds.com/content/guide/pclouds-vcsdeploy-deploy-stuff)。
问候
戴夫