首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将r10k与单独的模块存储库一起使用

将r10k与单独的模块存储库一起使用
EN

Server Fault用户
提问于 2017-10-03 14:41:34
回答 1查看 1.1K关注 0票数 1

我有一个傀儡与主人和代理人的工作安排。现在,我正在尝试使用r10k来管理伪代码。我的目标是在代码的每个git push上更改木偶代码,木偶母版上的/etc/puppetlabs/code/environments下面的木偶代码会自动更新。

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

我的设置如下:

r10k配置在/etc/puppetlabs/r10k/r10k.yaml中:

代码语言:javascript
复制
sources:
  operations:
    remote: '/srv/git/puppet.git'
    basedir: '/etc/puppetlabs/code/environments'

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

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

Puppetfile for testing看起来就像。

代码语言:javascript
复制
mod 'mymodule',
  :git => 'file:///srv/git/mymodule.git',
  :ref => 'HEAD'

而对于production来说,它看起来就像。

代码语言:javascript
复制
mod 'mymodule',
  :git => 'file:///srv/git/mymodule.git',
  :ref => 'stable'

(在此之前,我只有分支productionHEAD引用。)

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

每当执行r10k时,Git都要运行git push

  • /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上,我得到的输出如下

代码语言:javascript
复制
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

代码语言:javascript
复制
remote: INFO     -> Deploying module /etc/puppetlabs/code/environments/production/modules/mymodule

我的问题是--尽管有这样的输出--推到模块存储库的更改没有被/etc/puppetlabs/code/environments下面的文件所反映。

编辑

详细介绍一下我想要的工作流程:

  • 我的控件repo有两个分支,productiontesting,而模块存储库只有一个分支master。我认为这样会更容易,尤其是为了避免合并问题。但是考虑到在Git中合并可以限制为快速转发,而且r10k对分支的跟踪有积极的支持,我的工作流程实际上可能更容易使用分支productiontesting作为模块存储库。然后,我将在testing上工作(开发),并且只切换到production来执行类似git merge --ff-only testing的操作。
  • 我的第一个想法是为模块存储库创建一个Git标记stable,我不时地移到当前提交,即一直呆在master分支中,根本不进行任何合并。但是,仅在分支之间进行快速转发的合并也可以使我避免合并冲突,因此可能没有理由避免分支。另外,我可以在控件回购和模块恢复上获得相同的工作流。
  • 我刚开始学习有两个虚拟机的木偶,一个木偶主人和一个代理。我将添加另一个VM代理,然后将一个指向production环境,另一个指向testing,以便在为代理构建可用的木偶配置的同时验证我的工作流。现在,我将简单地在每个代理的puppet.conf中设置环境。
  • 稍后,我将使用真正的Linux,并将一个代理映射到testing,将所有其他代理映射到production。主程序将放在另一个盒子上,并手动设置。
EN

回答 1

Server Fault用户

回答已采纳

发布于 2017-10-04 09:36:16

根据你的问题和评论:

我的问题是--尽管有这样的输出--推到模块存储库的更改没有被/etc/puppetlabs/code/environments下面的文件所反映。

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

如果要跟踪branch,请使用以下内容:

代码语言:javascript
复制
mod 'mymodule',
  :git => 'file:///srv/git/mymodule.git',
  :ref => 'master'

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

老实说,我不知道你的工作流程是什么样子:

  • 您有一个有两个分支的控制回购,mastertestingmaster是稳定的生产代码,而您正在使用testing进行开发?
  • 您正在将新代码推送到testing,一旦它达到您满意的状态,您将把testing合并到master中吗?
  • 在此之后,您希望将master中的当前状态标记为stable,您的代理应该使用哪个状态?
  • 您的其他基础设施看起来如何?有多少特工到位了?如何测试代码,即如何告诉{one,all} (?)代理:“请使用这个环境中的代码”?
  • 跟进以上内容:如果您有mastertesting中的代码,您的代理如何知道要使用哪个环境?
  • 如果您能详细说明以上各点,并告诉我更多的细节(请将此添加到您的问题中,评论可能太有限了),我可能会帮助和扩展这个答案。
  • 不管怎么说,祝你好运!puppetr10k,特别是如果加上git挂钩,是一个很棒的设置!我自己用这个,太棒了!:)

更多信息:

  • 感谢您详细介绍您的工作流程。
  • 如果您在git方面还不是那么多才多艺,特别是如果您正在进行大量的分支和合并,并且害怕合并冲突,请务必阅读git重碱,它确实在另一个基本提示的基础上重新应用提交。
  • 假设您处于以下情况:
    • 您正在将master分支到feature1
    • 您在file1:3-6 in feature1中做了一些工作。
    • 您将直接在file1:7-10中更改master,以修复一个紧迫的错误。
    • 您想要将feature1合并回master
    • 通常,此时会出现合并冲突,因为相同的文件在两个分支中都被修改。
    • 如果在合并前在git rebase master上执行feature1操作,这将“将”最新的状态/提交(S)“拉”到feature1中,在本例中是错误修复。
    • 现在进行合并,没有冲突。

  • 我不会只局限于模块存储库中的一个分支。如何处理测试里面的新代码?这不仅是你的控制回购,需要加强随着时间的推移。
  • 为了让这更舒适,可以使用r10k的另一个特性:#跟踪控制分支,如果没有匹配的分支,则返回到master,:git =>‘=>’git =>:分支=> :control_branch,:default_branch => 'master‘。
  • 这将允许您执行以下操作,例如,在您希望在模块中开发一个新特性的情况下:
    • 在您的控制回购,分支的mastertesting
    • 在您的模块repo中,master的分支到testing
    • 在不改变Puppetfile的情况下,使用控制回购的testing分支的傀儡代理现在也使用模块回购的testing分支。
    • 发展到你满意为止。
    • 在您的模块repo中,将testing合并为master
    • 您开发的新代码现在将转到使用生产代码的所有傀儡代理,即您控制回购的master分支。

  • 最后一个注意事项是:听起来你是唯一一个开发代码的人,所以也许这对你来说没那么重要,只是想让你知道:
    • 如果两个分支太有限,则可以在运行傀儡代理时使用不同的环境,而不需要修改配置,而是通过提供cli param: puppet -t - environment ${FEATURE_BRANCH}。

  • 现在我能想到的就是这些。希望这能帮到你,再次祝你好运,万事如意!
票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/876646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档