使用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)
因此,设计了这样一个基于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)
相关文章推荐
- android wifi 无线调试
- 运维入门
- 动态清空 nohup 输出文件
- install scrapy with pip and easy_install
- Linux Shell常用技巧
- Shell 脚本编程陷阱
- shell字符串操作详解
- Shell中删除某些文件外所有文件的3个方法
- Ruby中执行Linux shell命令的六种方法详解
- VB使用shell函数打开外部exe程序的实现方法
- Shell编程的一些知识集合
- Shell中的for和while循环详细总结
- 什么是Shell?Shell脚本基础知识详细介绍
- Shell脚本中引用、调用另一个脚本文件的2种方法
- Shell脚本解压rpm软件包
- Linux Shell 数组建立及使用技巧
- Shell脚本实现复制文件到多台服务器的代码分享
- Shell脚本实现批量替换文件内容
- Shell脚本实现的一个简易Web服务器例子分享
- linux Shell学习笔记第五天