使用软件开发生命周期方法进行 Puppet 模块管理的最佳实践?

使用软件开发生命周期方法进行 Puppet 模块管理的最佳实践?

人们如何在源代码存储库中组织他们的 Puppet 清单和模块?我没有看到任何明显的方法可以在单个 Puppet 主机上分阶段实施 Puppet 中的更改。

其他人是如何管理这一点的?每个服务器组/SDLC 阶段一个主服务器实例?我非常希望在每个阶段使用相同的 Puppet 模块,并且只使用 subversion 来更改应用于每个服务器组/SDLC 阶段的 Puppet 模块版本,这样我就可以分阶段推出更改。我正在寻找一种方法来利用相同的模块并避免由于重复模块而导致的事故和变化。

我有大量服务器,我正在考虑使用 puppet 进行管理,并涵盖多个 SDLC(软件开发生命周期)阶段。灾难恢复、生产、准备、用户验收测试、测试、开发、培训

编辑以澄清第二部分:

那么你如何在源存储库中维护分支?例如,使用开发和测试分支,以及定义我从哪里获取补丁的文件。

您是否编辑:

repo:/dev/patchessource.txt 包含“patchserver/dev”

repo:/test/patchessource.txt 包含“patchserver/test”

并且这些文件有所不同,并且必须通过合并和从开发到测试的所有内容来维护这种差异,或者人们为每个环境使用不同的文件并将它们作为一个整体进行迁移:

repo:/dev/devpatchsource.txt 包含“patchserver/dev”

repo:/dev/testpatchsource.txt 包含“patchserver/test”

这样,当您将开发仓库合并到测试仓库时,您不必担心开发特定设置会覆盖测试特定设置?

我没有看到一个明显的解决方案可以让那些可能不熟悉源代码管理工具的后续管理员轻松操作。

任何提示将非常感谢。

答案1

环境就是解决这个问题的方法。使用环境,您可以定义生产、准备、UA 测试、测试、开发、培训等配置。

深入解释如何做到这一点有点广泛,但你可以阅读以下一些参考资料来帮助你入门:

在主存储库中,您有一个分支developmenttestingproduction(或适合您工作流程的任何分支)。您可以在开发分支上愉快地编写 Puppet 代码,提交、提交、推送。当您推送(通过某些 Git 钩子或 cron 作业)时,您的 Puppet Master 会更新(由 R10K 更新),并且您的节点会在其计划时间获得更新。

假设您有一个设置为环境的节点development,因此会获取您推送到分支的更改development。您可以测试所有这些。

您对更改感到满意,将其合并到下一个工作流步骤分支 - 比如说production。推送合并的更改并开始循环 - Puppet Master 将更改应用到production环境中,生产节点将应用新配置。

--

现在,我发现大家普遍存在一个困惑。development控制存储库的分支并不意味着“这是程序员机器的配置”。不,它意味着这是你的 Puppet 开发分支。

那么,您如何为 3 个团队(开发、QA 和生产)维护一组服务器(例如 Web 服务器)。也就是说,每个组都有一个 Web 服务器,这些服务器的配置基本相同,但有细微差别,因为一个是实时生产系统,一个是 QA 组,另一个是开发。

为此,您可以使用 Hiera。每个节点都会应用相同的类,但参数中的细微差别或您设置的内容是通过 Hiera 设置的。


当然,你也可以使用分支来表示“所管理的机器类型”,而不是 Hiera,但这有点荒谬,因为你不会将 Git 分支用于其实际用途。分支将完全不同,你需要通过从一个分支复制/粘贴到另一个分支来手动“合并”它们。那会很丑陋。

相关内容