如何使用git管理已部署项目代码
- 2017-07-22
- koko
- git
(本文首发于 koko.vc)
本教程是为了指导小伙伴们从0开始使用git来管理已部署到生产环境中的应用代码。从一人管理多套应用升级为多人管理一套应用,以达到简化应用运维工作的目的。
安装git
本地、远程git服务器、应用生产环境均需要安装git
git安装指南 https://git-scm.com/book/zh/v1/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git
下载源码
首先将生产环境中的全部源码下载到本地
例:我将生产环境中的全部文件下载到本地目录apache-tomcat-koko
中
初始化本地git目录
在linux下直接cd到apache-tomcat-koko
目录
在windwos下,打开apache-tomcat-koko
文件夹,鼠标右键点击文件夹空白处,在弹出的菜单中选择git bash here
,打开git命令行窗口
输入命令git init
,完成git初始化
输入命令git status
查询当前git状态,可以看到所有文件都是待添加状态。
梳理目录及文件
因为不是所有的目录及文件都需要使用git管理,所以在将文件纳入git仓库前需要梳理目录及文件
梳理目录
例:在此项目中有以下文件夹内容不需要纳入git仓库
/logs/ //日志目录
/temp/ //临时目录
/work/ //缓存目录
/webapps/ROOT/lucene/ //缓存目录
注意,虽然这些目录不需要纳入git仓库管理,但也不是直接删除就行。原因有二:
其一:有些目录系统不会自动生成,删除后应用将不能正常运行。
其二:有的目录系统会自动生成,服务器上生成后,git会提示这些文件夹待处理(虽不影响应用工作,但一看到git清单中有那么多待添加的文件的就不爽)
解决方法:
使用.gitignore
文件来让git忽略不需要管理的文件。
这个文件的作用就是告诉Git哪些文件不需要添加到版本管理中。这个文件的完整文件名就是.gitignore
,注意最前面有个.
。
这样没有扩展名的文件在Windows下不太好创建。
创建方法一:
创建一个文件,文件名为:.gitignore.
,注意前后都有一个点。保存之后系统会自动重命名为.gitignore
。
创建方法二:在cmd命令行中(或者git命令行中)执行 touch .gitignore
创建该文件。
我的.gitignore
文件内容如下:
#tomcat缓存
/work
#临时文件
/temp
#日志文件
/logs
#打印内容生成路径
/webapps/ROOT/assets/print/
#用户信息缓存
/webapps/ROOT/lucene/
添加文件.gitignore
后,再执行git status
看下变化
可以看到 logs/
、temp/
、work/
几个文件夹从待添加的列表中消失了。
因为将 logs/
、temp/
、work/
文件夹下的内容全部过滤了,对git来说这几个文件夹算是空文件夹。
而git默认不会将空文件夹添加到仓库中。
这相当于直接把文件夹直接删除了。
解决办法之一
分别在 logs/
、temp/
、work/
下再添加一个.gitignore
文件,内容不限,目的是要这个文件。
然后执行git add –f logs/.gitignore temp/.gitignore work/.gitignore
强制添加文件到git仓库。
再看git status,这几个目录就已经添加到git仓库了。
梳理文件
如果应用有部署到多个生产环境,每个环境下的配置文件可能不一样,比如应用名称、数据库配置等个性化配置。 如果直接把个性化配置文件纳入git仓库,会导致所有生产环境中个性化配置被覆盖,所以需要预先处理下个性化配置文件。 如果没此需求,可跳过此步。
刚好我这套代码有部署到多个服务器,每个服务器上配置文件并不完全相同。
我处理方法是将个性化配置文件改为模板文件纳入git仓库,并忽略配置文件本身
例:假如配置文件server.xml
是一个个性化配置文件.首先在文件.gitignore
中添加内容server.xml
,让git忽略server.xml
;
然后复制配置文件server.xml
并重命名为server.xml.template
,当作一个模板文件添加到git仓库;
在部署时将模板文件修改成配置文件(将server.xml.template
重命名为server.xml
),并修改配置内容后使用。这样后期使用git更新源码时不会覆盖掉个性化配置。
我在该项目中共遇到以下这些个性化配置文件:
bin/catalina.sh
conf/server.xml
webapps/ROOT/WEB-INF/classes/config/jcache.properties
webapps/ROOT/WEB-INF/classes/config/jservice.properties
webapps/ROOT/WEB-INF/classes/datasource.properties
webapps/ROOT/WEB-INF/classes/exchangedatasource.properties
webapps/ROOT/WEB-INF/classes/log4j.properties
webapps/ROOT/WEB-INF/classes/spring/service-consumerContext.xml
webapps/ROOT/WEB-INF/classes/sso.properties
webapps/ROOT/WEB-INF/web.xml
将本地源码添加到本地git仓库
git add .
将所有文件添加到本地有变化文件列表中
git commit -m "初始化应用代码"
将有变化的文件提交到本地仓库.参数-m "xxx"
是填写本次提交的备注信息.
git status
,文件添加到本地仓库以后再查询git状态,可以看到当前工作区已清空,没有待处理文件.
初始化远程git仓库及生产环境中的git目录
在git服务器上初始化git仓库目录
例:服务器类型linux;ip:10.11.1.23;仓库路径:/opt/git/koko.vc;
cd /opt/git/koko.vc
切换到koko.vc
目录,没有请新建;
git --bare init
初始化git仓库目录;与本地初始化不同,这里添加了参数--bare
;可以看到与本地初始化时仅生成一个.git
文件夹不同,服务器端生成了更多的文件夹.
关联本地仓库与远程仓库
在本地git目录下执行
git remote add server root@10.10.1.23:/opt/git/koko.vc 添加远程仓库,
server是我自定义的远程服务器名称;
使用
root账户登录服务器;服务器地址是
10.10.1.23;git仓库路径是
/opt/git/koko.vc`;
git push master server
将本地代码推送到git服务器.master
是本地git默认的分支名称;server
刚才添加的远程服务器名称;
第一次连接服务器时会提示是否信任服务器.按提示输入服务器root密码.
输入正确的密码后,git开始上传代码
应用服务器与远程仓库
在生产环境中初始化git目录
建议新建目录测试通过后再替换原应用,而不是直接在原有目录上更新。
例:原有目录是apache-tomcat-koko
,现在新建目录apache-atomcat-koko1
;
cd /apache-tomcat-koko1
git init
git remote add server root@10.10.1.23:/opt/git/koko.vc
git pull master server
输入密码后下载git服务器中的代码
下载完成之后,可以看到,本地提交的代码已全部通过git同步到生产环境中.
如果之前有处理过个性化配置文件,那现在将该文件还原.
例将server.xml.template
复制并重命名为 server.xml
#cp server.xml.template server.xml
完成个性化配置文件修改,然后就可以启动应用测试是否正常工作.
注意 如果测试应用与正式应用部署在同一服务器,请修改测试应用端口,避免端口冲突.
到此就已达到使用git来管理已部署项的目的.在掌握此方法后就可以去尝试使用git自动部署项目代码啦.
(本文首发于 koko.vc)