我有一个傀儡与主人和代理人的工作安排。现在,我正在尝试使用r10k来管理伪代码。我的目标是在代码的每个git push上更改木偶代码,木偶母版上的/etc/puppetlabs/code/environments下面的木偶代码会自动更新。
虽然这似乎适用于一个包含所有模块的单块控制存储库,但如果自定义模块位于单独的Git存储库中,我将无法让它工作。
我的设置如下:
r10k配置在/etc/puppetlabs/r10k/r10k.yaml中:
sources:
operations:
remote: '/srv/git/puppet.git'
basedir: '/etc/puppetlabs/code/environments'中央控制存储库/srv/git/puppet.git包含分支production和testing,每个分支都有:
manifests/site.pp,例如node default { contain mymodule }PuppetfilePuppetfile for 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
每当执行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上,我得到的输出如下
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下面的文件所反映。
详细介绍一下我想要的工作流程:
production和testing,而模块存储库只有一个分支master。我认为这样会更容易,尤其是为了避免合并问题。但是考虑到在Git中合并可以限制为快速转发,而且r10k对分支的跟踪有积极的支持,我的工作流程实际上可能更容易使用分支production和testing作为模块存储库。然后,我将在testing上工作(开发),并且只切换到production来执行类似git merge --ff-only testing的操作。stable,我不时地移到当前提交,即一直呆在master分支中,根本不进行任何合并。但是,仅在分支之间进行快速转发的合并也可以使我避免合并冲突,因此可能没有理由避免分支。另外,我可以在控件回购和模块恢复上获得相同的工作流。production环境,另一个指向testing,以便在为代理构建可用的木偶配置的同时验证我的工作流。现在,我将简单地在每个代理的puppet.conf中设置环境。testing,将所有其他代理映射到production。主程序将放在另一个盒子上,并手动设置。发布于 2017-10-04 09:36:16
根据你的问题和评论:
我的问题是--尽管有这样的输出--推到模块存储库的更改没有被
/etc/puppetlabs/code/environments下面的文件所反映。
r10k不知道HEAD的事。HEAD是不确定的,所以不可能像这样使用它。
如果要跟踪branch,请使用以下内容:
mod 'mymodule',
:git => 'file:///srv/git/mymodule.git',
:ref => 'master'为了保持设置的简单性,我想避免分支。相反,我希望始终使用模块存储库的最新提交进行测试,并使用另一个稳定的标记进行生产,每当代码处于可接受的状态时,我将继续使用该标记。
老实说,我不知道你的工作流程是什么样子:
master和testing。master是稳定的生产代码,而您正在使用testing进行开发?testing,一旦它达到您满意的状态,您将把testing合并到master中吗?master中的当前状态标记为stable,您的代理应该使用哪个状态?master和testing中的代码,您的代理如何知道要使用哪个环境?puppet和r10k,特别是如果加上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‘。master到testing。master的分支到testing。Puppetfile的情况下,使用控制回购的testing分支的傀儡代理现在也使用模块回购的testing分支。testing合并为master。master分支。https://serverfault.com/questions/876646
复制相似问题