使用 git 管理 Puppet 模块

使用 git 管理 Puppet 模块

我有一个在 Debian 7 上运行的 puppet/foreman 服务器,用于管理我的系统。我使用 puppet 的社区版本 3.7 和 foreman 1.6.0。我使用目录环境。

目前,我使用一种相当复杂的工作流程来处理我自己编写的模块,即在我的开发环境中创建它们,该环境由 subversion 控制,然后将它们导出到外部目录,为它们构建一个 puppet 模块 (puppet module build ...) 并将其安装在生产中。我考虑过使用 subversion 将它们分支/标记到生产中,但当时出于我不记得的原因而排除了这一想法。

同时,我学习了一点 git,并且更愿意使用 git 而不是 subversion。我现在的问题是,是否有最佳实践可以做到这一点?我可以想象至少两种方法,它们各有利弊。一种是将环境开发置于版本控制之下,然后将其克隆/分支到生产中。第二种是为每个模块创建一个 git 存储库,然后将它们克隆到环境中。

正如我所说,我刚接触 git,所以我对它的优点和缺点一无所知。而且我只使用 puppet 和 foreman 大约 8 个月。

干杯,克里斯托弗

答案1

答案实际上取决于你想要的版本控制程度。主要有以下几种方法:

  1. 将所有内容放在一个平面的 Git 存储库中,然后只需将其克隆到主存储库(或无主存储库,则为节点)上即可。

    这是迄今为止最简单的选择,但意味着您将在生产和开发环境中拥有同一模块的多个副本(尽管您可以使用符号链接来解决它)。


  1. 将主要 Puppet 代码放在单个 Git 存储库中,Git 子模块指向您的自定义模块。部署与上述相同,但将 添加--recursivegit clone

    这种方法的优点是您可以轻松引用外部模块(PuppetLabs 阿帕奇e 模块),并且相对容易引入上游更改,但您还需要处理 Git 子模块的开销,而众所周知,这些子模块非常混乱。


  1. 运行你自己的 Puppet Forge,并使用图书管理员木偶或者R10K管理模块的安装。

    这样做的好处是能够通过以下方式完全控制模块的版本语义版本而无需公开发布它们 - 尽管使用自己的 Puppet Forge 仍然被一些人认为是“前沿技术”。

相关内容