预计阅读本页时间:-
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目录的所有子目录及其文件了。