5.7 用GitHub来管理Puppet配置文件

随着Puppet节点机器的增多,其模块配置文件也越来越多,越来越不方便管理了,这个时候可以利用SVN或Git这些代码版本控制软件来管理Puppet的相关配置文件。

Git与SVN相比而言,优势还是很明显的,具体如下:

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

·Git是分布式的,而SVN是集中式的。

·Git可以在无网络的环境下提交,可以进行离线代码提交,因此称得上是完全的分布式处理。Git的所有操作都不需要在线进行,这就意味着Git的速度要比SVN等工具快得多,因为SVN等工具需要在线时才能操作,如果网络环境不好,提交代码会变得非常缓慢。

·Git的分支功能要比SVN强大得多,事实上,分支模型是Git最显著的特点。

·解决冲突方面Git也比SVN更方便。

·GitHub现在越来越流行了,像笔者所在公司采用的就是付费的GitHub私有库来进行代码托管的,线上代码的管理工作感觉相当稳定和方便。

综上所述,这里也推荐大家采用GitHub的方式来管理Puppet配置文件代码,Git命令在Mac和Ubuntu系统下面都已经自带安装了,如果大家的办公机器是Win8或Win10系列,推荐用msysGit,msysGit是Git控制系统在Windows下的版本,下载地址为https://git-for-windows.github.io/ ,为了节约篇幅,具体安装过程略过。

GitHub网址为https://github.com ,大家可以自行注册,然后建立自己的版本库,笔者这里采用的是http://github.com/yuhongchun/security 。

下面来具体看下msysGit的使用步骤:

1)在电脑的特定位置上(笔者这里是Windows 8.1 x86_64的桌面)点击鼠标右键选择“Git Bash Shell”,输入pwd查看当前位置,命令显示结果如下所示:

/c/Users/洪春

/Desktop

2)创建SSH Keys文件,输入如下所示命令:

ssh-keygen -t rsa -C "yuhongchun027@gmail.com"

3)输入后连续按3个回车,就可以在默认的文件夹下生成keys文件,命令显示结果如下:

Generating public/private rsa key pair.

Enter file in which to save the key (/c/Users/洪春

/.ssh/id_rsa):

Created directory '/c/Users/洪春

/.ssh'.

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /c/Users/洪春

/.ssh/id_rsa.

Your public key has been saved in /c/Users/洪春

/.ssh/id_rsa.pub.

The key fingerprint is:

SHA256:YR/fRVUIUZAHJPnl89RB36bTyJ+LqXIQYxfpwh05v0U yuhongchun027@gmail.com

The key's randomart image is:

+---[RSA 2048]----+

| .oOBoo*|

| .B. +Eo|

| + +.=+. B|

| . O *.+oBo|

| S * . O+.|

| . . oo|

| . ..|

| . . o .|

| o..o . |

+----[SHA256]-----+

4)用编辑器打开id_rsa.pub文件,这里采用的是Sublime Text 3,将其内容全部复制。然后打开自己的GitHub主页,选择“SSH Keys”菜单,点击“Add SSH key”选项,在最下面的空白框里复制刚才选择的公钥文件内容,还可以取一个自己定义的名字,如图5-3所示。

阅读 ‧ 电子书库

图5-3 GitHub添加SSH Key图示

5)回到Git Bash当中,输入如下命令进行测试:

ssh -T git@github.com

命令显示结果如下:

Hi yuhongchun! You've successfully authenticated, but GitHub does not provide shell access.

结果表示一切正常,接下来就可以通过git clone命令加载自己的版本库了,命令如下所示:

git clone git@github.com:yuhongchun/security.git

注意这里的格式,如果写成git://github.com/yuhongchun/security.git,那么客户端的URL请求是可读模式,写成git@github.com:yuhongchun/security.git这样的格式才是可写的模式。

当然了,也可以选择HTTPS协议,但Git协议是Git使用的网络传输协议里最快的,这也是我没有选择HTTPS协议的原因,命令执行成功以后,就在本地的办公机器上克隆一个本地版本库。

6)向GitHub提交自己的名字和邮箱。

在此之前还需要设置username和email,因为GitHub每次提交都会记录它们,下面笔者还是以自己的名字和E-mail邮箱地址来举例说明,命令如下:

git config --global user.name "your name"

git config --global user.email "your_email@youremail.com"

7)向自己的GitHub提交代码,以init.pp文件为例,先将init.pp复制粘贴到本地的security目录下面,执行下面的步骤:

git add init.pp #添加

init.pp至本地版本库的暂时区

git comit -m "the apache module" #向本地版本库提交

init.pp

git push #向自己的

GitHub版本库提交代码

正确提交init.pp以后,就可以在其GitHub上面看到所提交的代码,也就可以像管理我们的代码一样管理其Puppet配置文件了,如图5-4所示。

另外,补充一个小知识点,要是想把Apache整个目录git push至GitHub上面去,却发现不能上传下面的空目录files,这里什么原因呢?

具体原因如下:Git和SVN不同,它仅跟踪文件的变动,而不跟踪目录。所以,一个空目录如果里面没有文件,即便Git加载了这个目录,也是没有任何效果的,版本库是不会做任何记录的。只跟踪文件变化,不跟踪目录,Git这么设计是有原因的,但这也会带来一些小麻烦。有时候,确实需要在代码仓库中保留某个空目录。比如,若要提交Apache的所有子目录就会出现问题,但我们可以采用一个变通的解决办法,那就是在空目录files下存一个.gitignore文件(.gitignore文件的作用是列出不希望Git跟踪的文件和文件夹)。做好这些以后,就可以顺利执行git add和git push命令了,步骤如下:

阅读 ‧ 电子书库

图5-4 GitHub网站版本库文件明细图

git add apache

git commit -m "the apache module"

git push

顺利的话,在自己的GitHub版本库上就能看到Apache目录的所有子目录及其文件了。