我目前正在运行木偶在无母模式。我正在使用r10k进行模块和环境部署。
简化版本: r10k控制库有两个分支:测试和生产。生产中的更改将自动分发到生产服务器。某些暂存服务器的测试更改。
现在,如果我在测试中更改内容,我有时也必须更改r10k控件存储库。一个常见的例子是Puppetfile,它目前在生产中如下所示:
forge 'forge.puppetlabs.com'
# Forge modules
mod 'puppetlabs/stdlib'
mod 'puppetlabs/concat'
mod 'saz/ssh'
# Custom modules
mod 'ownmodule1',
:git => 'https://git.example.org/configuration/ownmodule1.git',
:ref => 'production'
mod 'ownmodule2',
:git => 'https://git.example.org/configuration/ownmodule2.git',
:ref => 'production'自定义模块的配置在测试分支上可能如下所示:
mod 'ownmodule1',
:git => 'https://git.example.org/configuration/ownmodule1.git',
:ref => 'testing'
mod 'ownmodule2',
:git => 'https://git.example.org/configuration/ownmodule2.git',
:ref => 'testing'现在,测试中的提交可能如下所示:
+mod 'ownmodule3,
+ :git => 'https://git.example.org/configuration/ownmodule3.git',
+ :ref => 'testing'如果我将它合并到生产中,并且不小心,ownmodule3将与测试分支一起添加到生产中,这可能是致命的。当所有测试都成功时,这也会阻止自动合并。
如何修改我的存储库或工作流以防止分支特定更改的意外合并?
发布于 2016-09-26 13:17:55
自r10k 2.4.0以来,可以让傀儡模块与控制存储库中的分支匹配。在分支testing上,我问题中的Puppetfile可能如下所示:
mod 'ownmodule1',
:git => 'https://git.example.org/configuration/ownmodule1.git',
:ref => :control_branch这将导致模块所属模块的分支testing在r10k部署中使用。这相当可靠。使用:default_branch,您可以指定一个回退分支。
发布于 2016-08-14 20:29:37
将Puppetfile中用作参考的硬编码环境名称替换为当前环境名称的变量将有助于使您的Puppetfile可以在分支之间进行合并。
伪码:
mod 'ownmodule1',
:git => 'https://git.example.org/configuration/ownmodule1.git',
:ref => ${environment}对于实际的代码,请参阅这个答案,但我不能保证它在您的设置中会工作,这有点麻烦。
但是,当然,要使您的环境在此更改后正确部署,您必须在模块中创建production分支以及testing,并在它们中加入一些最小的、没有操作但编译新模块的代码。
如果这个答案是有帮助的,并且你决定投它,那么请把链接的答案也向上投。
https://serverfault.com/questions/788431
复制相似问题