r10k:使用 git 进行正确的合并工作流程

r10k:使用 git 进行正确的合并工作流程

我目前正在以无主模式运行 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您可以指定一个后备分支。

相关内容