您的位置:首页 > 编程语言

使用git服务器实现生产环境应用服务器代码更新管理的方案

2015-12-24 16:53 1221 查看
方案的缘由是生产机房除指定的两台管理主机外,其它应用主机均不开放公网SSH管理端口。在对应用主机上的应用进行源码更新时,虽然可以借助架设的堡垒机或lrzsz工具实现大小文件、甚至批量文件的传输,但lrzsz工具仅适用于上传小文件,尤其是在通过堡垒机进行ssh代理中转时更为突出。而堡垒机虽然提供了WEB方式的文件传输(多文件对多点)功能,但每次都要使用浏览器登录进行操作,略麻烦。
因此,设计了这样一个基于git服务器的源码传输方案。

总体思路是:

在生产机房开放了公网SSH管理端口的主机上部署git服务器;
从公司办公环境使用图形化git工具管理代码文件,并推送至远程的git服务器;
在生产环境中,应用主机需要更新代码时,先ssh登录到该主机,将git服务器的代码仓库克隆到本地,以后每次需要更新时只要运行一次git pull即可获取到最新版本的代码;
虽然没有进一步实现,但借助fabric工具应该可以实现对多个应用主机的批量自动化处理。



0、设置git服务器

以CentOS6.5为例。
在git服务器上安装git软件包,并为每个有代码更新权限的用户创建一个专用的git仓库,以避免相互干扰。
#yum -y install git
#useradd git
#su - git
创建一个测试使用的仓库:
$git init --bare codes.git

修改/etc/passwd禁用shell登录,git用户可以正常通过ssh使用git,但无法登录shell:
git:x:5023:5023::/home/git:/usr/bin/git-shell

1、设置用户访问远程git库:
创建SSH Key。
(1)安装图形化工具tortoiseGit,下载地址:https://tortoisegit.org/download/ 。
(2)安装完成后,从菜单中找到PuTTY Key Generator并运行。
在弹出的界面中,点击"Generate",按提示完成制作key的步骤。
(3)手工复制工具界面中生成的公钥代码的内容并追加到远程ssh服务器的authorized_keys文件中。
(4)点击"Save private key"将私钥保存至本地。



2、选择一个本地目录用于存储git仓库代码,并克隆远程仓库到本地
在选中的目录上右击并选择TortoiseGit-Clone,按下图填写URL并加载刚才保存的ssh私钥。点击ok完成配置。



当远程的git服务器使用了自定义的ssh端口时,TortoiseGit会返回一个网络报错。



3、设置自定义的git服务器ssh端口
由于tortoiseGit不能支持ssh的自定义端口,所以需要通过putty这个工具提供支持。
需要下载一个putty,然后按照下文指导设置一个session 会话的连接并保存。
然后再使用tortoiseGit进行代码push时就可以连接正确的ssh端口了。

下载putty:http://the.earth.li/~sgtatham/putty/0.66/x86/putty.exe

运行putty,新建并保存一个session会话连接:
在session界面中输入host ip,port以及session的名称。



从左侧菜单中选择Connection-SSH-Auth,在右侧选择自己的私钥。



回到Session菜单下,点击"Save"。然后可以关闭putty工具了。

4、重新将远程仓库克隆到本地
这次需要将第2步中使用过的URL地址修改如下,使用第3步中定义的session name替换掉远程服务器的ip地址。



点击ok,后即可以成功完成克隆。



5、使用TortoiseGit进行代码add、commit、push操作
在windows的本地git仓库目录中,使用鼠标右键完成文件的“add”操作;
“add”成功后的提示窗口中提供了"commit"的按钮,点击"commit"可以提交到本地master分支;
"commit"成功后的提示窗口中提供了"push"的按钮,点击"push"可以推送到远程git服务器origin创库的master分支。
点"close"完成全部操作。



6、在生产环境应用主机上面下载代码并进行更新
1)登录需要更新代码的应用主机,切换到指定的授权系统用户(如myuser)
对myuser授权的方法,是将该主机的myuser用户的公钥添加到git服务器git用户的.ssh/authorized_keys文件中,以支持公钥无密码操作git
shell。

2)在应用主机上选择一个用于存放git代码的路径,如/tmp/gittest
$mkdir -p /tmp/gittest
$cd /tmp/gittest
3)第一次运行时需要先把远程库克隆到本地一份:
$git clone ssh://git@192.168.10.11:68806/home/git/codes.git
Initialized empty Git repository in /tmp/gittest/codes/.git/

warning: You appear to have cloned an empty repository.

完成克隆后,在/tmp/mygit/codes下已经有一份最新的代码了,且建立了本地master分支与远程origin库的关联。
以后再需要获取新版本的代码库,只需要执行git pull命令,如下一步所示。

4)使用git pull来获取远程库的代码到本地
$cd /tmp/gittest/codes
$git pull origin master    #从远程仓库获取最新版本代码并与本地master分支进行合并

注:第一次执行后可以直接运行git pull,会默从远程origin取代码覆盖本地master分支。

其它git管理命令:
$git log     #查看git操作记录
$ git branch     #查看本地分支

* master

$ git remote -v     #查看远程仓库

origin  ssh://git@192.168.10.11:68806/home/git/codes.git (fetch)

origin  ssh://git@192.168.10.11:68806/home/git/codes.git (push)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息