Git自动部署
本文最后更新于:8 个月前
Git代码自动部署有两种常见的方式,一种是git hook,另一种是github webhook。两者的本质都是在提交代码的时候触发脚本执行
Git自动部署
一、什么是自动部署
开发者需要将提交到Git服务器上的代码进一步部署到Web服务器上。在提交代码到Git服务器的同时自动将代码部署到Web服务器上,就叫「自动部署」。
首先要明确代码的分布情况,开发者电脑上的本地仓库、Git服务器上的远端仓库、web服务器上的另一个本地仓库(浏览器访问的就是这里的代码)。实现自动部署就是要当从开发者本地仓库提交源代码到远端仓库的时候,自动把构建好的代码部署到web服务器的本地仓库,实现开发者本地仓库和web服务器的本地仓库的同步(即通过Git hooks中的post-receive脚本文件)
执行流程:
- 用户在客户端执行git push操作
- 远程仓库发现有用户执行了push操作,就会执行一个脚本post-receive
- 在post-receive脚本中,将git仓库的代码拷贝到web站点目录下
参考链接:
利用Git Hooks自动部署 - 简书 (jianshu.com)
二、git hook
Git hooks是在 Git 仓库中特定事件(certain points)触发后被调用的脚本。通过钩子可以自定义 Git内部的相关(如 git push)行为,在开发周期中的关键点触发自定义的行为。
Git 含有两种类型的钩子:客户端的和服务器端的。
客户端的hooks由诸如提交和合并这样的操作所调用,而服务器端hooks作用于诸如接收被推送的提交这样的联网操作。
1、步骤简介
以下步骤建立在服务器上已经创建了git用户、和本地主机配置了ssh密钥的基础上
- 在应用服务器上建立「代码裸仓库」,并设置为项目的远程仓库
- 在「裸仓库」上设置自动部署的脚本
2、建立项目仓库
1 |
|
3、建立代码裸仓库
1 |
|
【扩展】git --bare init
和git init
的区别:
git --bare init
初始化的是一个裸仓库;里面没有工作区,不能进行git操作,操作必须在工作树上进行。
它是一个独立的git仓库,与项目源码分离(通过hooks钩子“链接”一个存放项目源码的文件夹)
git init
初始化普通仓库,创建出一个带
.git
目录的空文件夹,目录结构与项目代码结构一致,项目源码就放置到该文件夹中,有工作区,可以执行各种git操作。打开
.git
目录,可以发现和git --bare init
创建出来的内容完全一致。
4、配置 git 钩子
1 |
|
5、本地链接web服务器仓库
在本地项目的git仓库中,链接到第3步建立的「代码裸仓库」,在本地项目的git bash中输入以下命令
1 |
|
然后就可以向web服务器推送更新了
1 |
|
三、github webhook
等待后续补充…