温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Puppet如何做版本控制

发布时间:2026-11-07 07:39:29 来源:亿速云 阅读:101 作者:小樊 栏目:系统运维

在 Puppet 里做“版本控制”通常包含两个层面:

  1. Puppet 代码(manifest / module / Hiera)的版本控制
  2. Puppet 自身(agent / server)版本的版本控制

下面分别说明,重点在第 1 部分(最常见)。


一、Puppet 代码的版本控制(最佳实践)

1. 使用 Git 管理 Puppet 代码

Puppet 代码本质是文本文件,最适合用 Git。

常见仓库结构(以 control repo 为例):

control-repo/
├── environment.conf
├── Puppetfile
├── hiera.yaml
├── manifests/
│   └── site.pp
├── data/
│   └── common.yaml
└── modules/

初始化:

git init
git add .
git commit -m "init puppet control repo"

推荐:

  • production 分支作为生产环境
  • development / feature/* 分支做开发
  • 用 PR / Merge Request 做代码评审

2. 使用 r10k 或 Code Manager 做环境同步

Puppet 通常按 environment 对应 Git 分支:

Git 分支 Puppet 环境
production production
development development

r10k 示例

Puppetfile:

mod 'nginx',
  :git => 'https://github.com/puppetlabs/puppetlabs-nginx'

部署:

r10k deploy environment -p

这样:

  • Git 分支 = Puppet 环境
  • 每次合并 = 一次“版本发布”

3. Module 单独版本化(语义化版本)

每个 module 应有自己的 Git 仓库和版本号:

metadata.json
{
  "name": "myorg-nginx",
  "version": "1.2.0"
}

建议:

git tag 1.2.0
git push --tags

在 Puppetfile 中锁定版本:

mod 'myorg-nginx',
  :git => 'https://github.com/myorg/puppet-nginx',
  :tag => '1.2.0'

4. Hiera 数据也要进版本控制

data/
├── common.yaml
├── nodes/
│   └── web01.yaml
└── roles/
    └── web.yaml

避免:

  • 明文密码(用 Puppet Vault / Hiera-E YAML / SOPS)
  • 手动改 /etc/puppetlabs/code

二、Puppet 自身版本控制

1. Puppet Agent / Server 版本

  • 使用操作系统包管理器(yum / apt)
  • 锁定版本防止意外升级:
yum versionlock puppet-agent

或:

apt-mark hold puppet-agent

2. Puppet 版本与代码兼容性

  • Puppet 7 ≠ Puppet 8(语法/功能差异)
  • 在 metadata.json 中声明支持版本:
"requirements": [
  { "name": "puppet", "version_requirement": ">= 7.0.0 < 9.0.0" }
]

三、推荐整体方案(生产可用)

Git (control-repo)
 ├── branches = environments
 ├── r10k / Code Manager
 ├── modules (versioned + tagged)
 └── Hiera (encrypted secrets)

流程示例:

  1. 在 feature/nginx 分支改配置
  2. 提 MR
  3. 评审通过合并到 production
  4. r10k 自动部署
  5. Puppet Agent 拉取新版本

如果你愿意,我可以:

  • 给你一个 完整 control-repo 模板
  • 讲 Puppet + GitLab CI / GitHub Actions
  • 或针对 Puppet 7 / 8 具体版本给建议
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手