我目前正在以无主模式运行 Puppet。我正在使用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'
如果我将其合并到production并且不小心,ownmodule3将与testing分支一起添加到production中,这可能是致命的。当所有测试都成功时,这也可以防止自动合并。
如何修改我的存储库或工作流程以防止意外合并分支特定更改?
用替换为当前环境名称的变量替换用作 refs 的硬编码环境
Puppetfile
名称将有助于使您的 Puppetfile 在分支之间可合并。伪代码:
对于实际代码,请参阅此答案,但我不保证它会在您的设置中工作,它有点 hacky。
但是当然,为了让您的环境在此更改后正确部署,您必须
production
在模块中创建分支,testing
并使用一些最小的、无操作但为新模块编译代码来初始化它们。PS如果此答案有帮助并且您决定对其进行投票,那么也请对链接的答案进行投票。
从 r10k 2.4.0开始,可以让 puppet 模块与控制存储库中的分支匹配。在分支
testing
上,我的问题中的 Puppetfile 可能如下所示:这将导致
testing
模块ownmodule的分支与r10k deploy一起使用。这是相当可靠的。:default_branch
您可以指定一个后备分支。