使用带有单独模块存储库的 r10k

使用带有单独模块存储库的 r10k

我有一个包含 Master 和 Agent 的 Puppet 工作设置。现在我尝试使用 r10k 来管理 Puppet 代码。我的目标是每次git push更改代码时/etc/puppetlabs/code/environments,Puppet Master 上的 Puppet 代码都会自动更新。

虽然这似乎适用于包含所有模块的一个整体控制存储库,但如果自定义模块位于单独的 Git 存储库中,我就无法让它工作。

我的设置如下:

r10k 配置/etc/puppetlabs/r10k/r10k.yaml

sources:
  operations:
    remote: '/srv/git/puppet.git'
    basedir: '/etc/puppetlabs/code/environments'

中央控制存储库 /srv/git/puppet.git包含分支productiontesting,每个分支具有:

  • 具有节点配置的A manifests/site.pp,例如node default { contain mymodule }
  • APuppetfile带有外部模块引用

forPuppetfile看起来testing像例如

mod 'mymodule',
  :git => 'file:///srv/git/mymodule.git',
  :ref => 'HEAD'

production它看起来像例如

mod 'mymodule',
  :git => 'file:///srv/git/mymodule.git',
  :ref => 'stable'

(直到这个工作完成我才有分支production和参考HEAD。)

每个自定义模块都有另一个 Git 存储库例如/srv/git/mymodule.git

Git 钩子git push每当执行以下命令时运行 r10k :

  • /srv/git/puppet.git/hooks/post-receive

    有内容r10k deploy environment -pv

  • /srv/git/mymodule.git/hooks/post-receive

    有内容r10k deploy module mymodule -v

钩子被执行,因为git push我得到了像这样的输出

remote: INFO     -> Deploying environment /etc/puppetlabs/code/environments/production
remote: INFO     -> Environment production is now at 991830eb1561cddd7970be4152748168df52ef79
remote: INFO     -> Deploying Puppetfile content /etc/puppetlabs/code/environments/production/modules/mymodule

remote: INFO     -> Deploying module /etc/puppetlabs/code/environments/production/modules/mymodule

我的问题是 - 尽管有这样的输出 - 推送到模块存储库的更改并未反映在下面的文件中/etc/puppetlabs/code/environments


编辑

详细说明一下我预期的工作流程:

  • 我的控制存储库有两个分支productiontesting,而模块存储库只有一个分支master。我认为这样会更容易,尤其是可以避免合并问题。但考虑到在 Git 中合并可以限制为快进,并且 r10k 积极支持跟踪分支,使用分支productiontesting模块存储库的工作流程实际上可能更容易。然后我会继续工作(开发),testing并且只切换到production执行类似的事情git merge --ff-only testing
  • 我的第一个想法是为模块存储库创建一个 Git 标签stable,我会不时将其移动到当前提交,即master始终停留在分支中而不进行任何合并。但是分支之间的快速向前合并也可以让我避免合并冲突,因此可能没有理由避免分支。此外,我可以在控制存储库和模块存储库上获得相同的工作流程。
  • 我刚刚开始学习 Puppet,有两个虚拟机,一个 Puppet 主控和一个代理。我将添加另一个 VM 代理,然后将一个代理指向环境production,另一个testing指向环境,这样我就可以在为代理构建可用的 Puppet 配置的同时验证我的工作流程。现在,我只需在每个代理的 中设置环境即可puppet.conf
  • 稍后我将使用真正的 Linux 机器,将一个代理映射到 ,testing将所有其他代理映射到production。主服务器将位于另一台机器上,并手动设置。

答案1

根据您的问题和评论:

我的问题是 - 尽管有这样的输出 - 推送到模块存储库的更改并未反映在下面的文件中/etc/puppetlabs/code/environments

r10k不知道HEADHEAD是非确定性的,所以不可能像这样使用它。

如果您想要跟踪branch,请使用以下命令:

mod 'mymodule',
  :git => 'file:///srv/git/mymodule.git',
  :ref => 'master'

为了使设置简单,我想避免分支。相反,我希望始终使用模块存储库的最新提交进行测试,并使用另一个稳定的标签进行生产,只要代码处于可接受的状态,我就会继续进行生产。

老实说,我不确定你的工作流程是什么样的:

  • 您有一个带有两个分支的控制仓库,master并且testing。当您用于开发master时,它是稳定的生产代码吗?testing

  • 您正在将新代码推送到testing,一旦它达到您满意的状态,您就会将其合并testingmaster

  • 在此之后,您想将当前状态标记为masterstable您的代理应该使用哪个?

  • 您的其他基础设施是什么样的?有多少个代理?您如何测试代码,即如何告诉{一个,所有}(?)代理:“请使用来自此环境的代码”?

  • 跟进上述问题:如果您已经在master和中编码testing,那么您的代理如何知道要使用哪个环境?

  • 如果您可以详细说明以上几点并告诉我更多细节(请将其添加到您的问题中,评论可能太有限了),我可能会提供帮助并扩展这个答案。

  • 无论如何,祝你好运!puppetr10k,特别是如果与 git hooks 结合使用,是一个很棒的设置!我自己用过,效果很好! :)

附加信息:

  • 感谢您详细说明您的工作流程。

  • 如果你还不太熟悉 git,尤其是当你在做大量分支和合并操作,又担心合并冲突时,请务必阅读git rebase,确实

    在另一个基本提示之上重新应用提交

  • 假设你处于以下情况:

    • 您正在分支masterfeature1
    • file1:3-6你在做一些工作feature1
    • 您正在file1:7-10直接更改以master修复紧迫的错误。
    • 您想feature1重新合并到master
    • 通常,此时您会遇到合并冲突,因为两个分支中都修改了同一个文件。
    • 如果您git rebase masterfeature1合并之前执行此操作,这将“拉”最新状态/提交到feature1,在本例中是错误修复。
    • 现在进行合并,没有冲突。
  • 我不会将自己限制在模块存储库中的一个分支上。您如何处理其中的新代码测试?随着时间的推移,需要增强的不仅仅是您的控制存储库。
  • 为了使这舒适,使用另一个功能r10k

    # Track control branch and fall-back to master if no matching branch exists
    mod 'mymodule',
      :git => 'file:///srv/git/mymodule.git',
      :branch => :control_branch,
      :default_branch => 'master'
    
  • 这将允许您执行以下操作,例如在您想要在模块中开发新功能的情况下:

    • 在您的控制仓库中,将 分支mastertesting
    • 在您的模块仓库中,将 分支mastertesting
    • 无需更改您Puppetfile的 puppet 代理,它testing现在使用您的控制存储库的分支使用testing你的模块仓库的分支。
    • 不断开发直到您满意为止。
    • 在您的模块仓库中,合并testingmaster
    • 您开发的新代码现在将发送给所有使用生产代码(即master控制仓库的分支)的傀儡代理。
  • 现在最后一点需要注意的是:听起来你是唯一一个开发代码的人,所以这对你来说可能并不那么重要,只是想让你知道:

    • 如果两个分支太有限,则完全可以在 puppet 代理运行期间使用不同的环境,而无需修改配置,而是通过提供 cli 参数:

      puppet agent -t --environment ${FEATURE_BRANCH}
      
  • 我现在能想到的就这些了。希望这些能帮到你,再次祝你好运,万事如意!

相关内容