我有一个运行在 Debian 7 上的 puppet/foreman 服务器来管理我的系统。我使用 puppet 和 foreman 1.6.0 的社区版本 3.7。我使用目录环境。
目前,我为自己编写的模块使用了一个相当复杂的工作流程,在我的开发环境中创建它们,这是受颠覆控制的,然后将它们导出到外部目录,构建它们的 puppet 模块(puppet module build ...)和在生产中安装它。我考虑过使用颠覆将它们分支/标记到生产中,但当时出于我不记得的原因排除了这一点。
同时我学了一点 git,我宁愿使用 git 而不是 subversion。我现在的问题是,是否有最佳做法可以这样做?我可以想象至少有两种方法各有利弊。一种是将环境开发置于版本控制之下,然后将其克隆/分支到生产环境。其次是为每个模块制作一个 git repo,并将它们克隆到环境中。
正如我所说,我是 git 新手,所以我对它的优缺点一无所知。此外,我只使用 puppet 和 foreman 大约 8 个月。
干杯,克里斯托夫
答案实际上取决于您想要的版本控制方式。主要有以下几种方法:
将所有内容存放在一个平面 Git 存储库中,然后将其克隆到您的主服务器(或节点,如果您正在运行无主服务器)。
这是迄今为止最简单的选项,但意味着您将在生产和开发环境中拥有同一模块的多个副本(尽管您可以使用符号链接绕过它)。
将您的主要 Puppet 代码放在一个 Git 存储库中,Git 子模块指向您的自定义模块。部署与上面相同,只是添加
--recursive
了git clone
.这种方法的优点是您可以轻松引用外部模块(例如PuppetLabs Apache e 模块)并且相对容易拉入上游更改,但您也必须处理 Git 子模块的开销,这些子模块出了名的混乱.
运行您自己的 Puppet Forge,并使用Librarian-puppet或R10K来管理您的模块的安装。
这样做的好处是能够通过SemVer完全控制模块的版本,而无需公开发布它们——尽管滚动你自己的 Puppet Forge 仍然被某些人认为是“前沿”。