Git服务器远程部署代码
[序言] 最近使用git进行代码远程部署到服务器时,查阅过很多文章,但是大多数文章都是傻瓜式的教程,而且不同的文章讲的还不大一样,结果看的我是满脑浆糊。最后我通过各种途径弄懂了以后,才发现这么简单的原理为什么就不能先讲清楚呢?还是俗话说得好:授人以鱼不如授人以渔。
所以,下面我会以我个人的理解来讲讲Git
服务器远程部署代码的基本原理以及其大致过程。
1. Git服务器
Git
可以让我们自己搭建一个git
服务器,实现很简单:
git init --bare [directory]
参数directory
可以指定我们希望作服务器的目录的名称,但必须要以.git
结尾,然后git会自动在当前目录下为我们创建并初始化这个新目录,使其成为一个git
服务器仓库。如果参数directory
省略或者是一个.
,则表示当前所在的目录,git
会直接初始化当前的目录,但当前的目录名称也必须要以.git
结尾,这个服务器才有效。
我们可以把服务器仓库和本地的仓库看成是同一种,只不过其中对代码的存储方式以及它们所具有的功能不一样。
至此,我们就可以在本地仓库克隆这个服务器仓库,或者向服务器仓库推送代码,这里不再详细展开了。
注意: git服务器的地址,就是远程机器的网络路径(IP地址)+ 机器里git服务器目录的可访问路径(一般都是绝对路径),而访问的通信协议是git
(就是ssh
),例如:git@123.45.67.89:22/xxx/xxx.git
,前面是协议以及机器的IP地址,ssh端口号默认22可以省略,如果本地仓库和服务器仓库在同一台机器上可以省略不写;后面的是在这台机器上访问服务器目录的绝对地址。
2. Git钩子(hooks)
如果把git
服务器的工作内容和流程划分成各种不同的阶段和功能的话,git
钩子可以看作是与其中特定阶段直接相关联的脚本文件。这就像是触发器,达到指定的条件,就会触发对应的任务状态,并执行对应的脚本来实现一些操作。
在仓库目录下,有一个hooks
文件夹,里面就是那些对应的脚本文件,git
默认生成的是样例文件,不会起效,若想要起效只需要将.sample
后缀去掉就可以了,也可以自己重新创建并编写脚本,而文件的名称是Git
已经规定好的,不能随便写,感兴趣的可以自行去官网了解更多内容。
而我们所需要的是,在本地向服务器推送了新的代码后,行为在服务器上也能够自动部署这些新的代码。所以我们所需要的Git
钩子文件是post-receive
文件,创建了post-receive
文件之后就可以打开编辑脚本了,其中git
支持一些常用类型的脚本,bash
、shell
等,具体的可自行查找。
git
服务器会在接收到新的推送内容后,触发执行post-receive
脚本文件,所以我们就可以编写自己需要执行的脚本任务了。
3. 编写脚本
了解了钩子(hooks
)大致原理后,我们就可以开始编写脚本来执行我们想要的任务了。
提醒: 在代码部署的目录里也是git
本地仓库
#!/bin/sh
# 指定当前文件内容为shell脚本,使用/bin/sh来运行
unset GIT_DIR
# 先释放git当前工作目录,否则后面在部署目录拉取最新时会出错, GIT_DIR是git关键字
cd xx/xxx/DeployPath
# 切换目录到代码的部署目录下
git pull
# git pull origin master指令拉取最新内容
上述三行命令只是最简单的脚本,本人对shell
的了解不够深入,就不在此献丑了,只拿上面的来说明hooks
的工作原理的工作流程就可以了,更多更完善的功能以后再说吧,网上其它的一些文章里也有很多脚本写法可以借鉴。
最后
这篇文章可能需要一定的Git
基础来加快理解,因为本文对一些git
操作有所简略,会git的可能会明白其中过程,不明白的可以先多了解一些git
内容,这对以后自己的工作学习也会很大的帮助。当然,精通git的估计也不会来看这篇文章了吧【狗头保命】。
补充: 添加ssh密钥: 在/home/
或者/home/git/
目录下的.ssh
文件夹目录, 创建authorized_keys
文件, 写入客户端机器的公钥, 不同公钥换行存储。注意windows和linux的换行符兼容性。
这篇文章也是我在学习git
和实际利用Git
来完成我所需要的功能时所遇到的一些问题的解惑,及时记录下来,以后还可以回顾一下。