我目前正在以无主模式运行 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'
如果我将其合并到生产并且不小心,ownmodule3将添加到生产与测试分支,这可能是致命的。这也会阻止所有测试成功时的自动合并。
我如何修改我的存储库或工作流程以防止意外合并分支特定的更改?
答案1
用替换为当前环境名称的变量替换用作引用的硬编码环境名称Puppetfile
将有助于使您的 Puppetfile 可以在分支之间合并。
伪代码:
mod 'ownmodule1',
:git => 'https://git.example.org/configuration/ownmodule1.git',
:ref => ${environment}
为了实际的代码见这个答案,但我不保证它能在您的设置中工作,它有点不安全。
但是,当然,为了使您的环境在此更改后正确部署,您必须production
在模块中创建分支,并testing
使用一些最少的、无操作的但编译新模块的代码来初始化它们。
PS:如果这个答案有帮助,并且您决定赞成它,那么也请赞成链接的答案。
答案2
自 r10k 2.4.0 起,可以让 puppet 模块与控制存储库中的分支匹配。在分支上testing
,我的问题中的 Puppetfile 可能如下所示:
mod 'ownmodule1',
:git => 'https://git.example.org/configuration/ownmodule1.git',
:ref => :control_branch
testing
这将导致模块的分支自己的模块与...一起使用r10k 部署。这非常可靠。:default_branch
您可以指定一个后备分支。