使用 Git Hooks 实现自动项目部署

简介: 最近在某服务器上面搭建 git 开发和部署环境,git 开发环境很简单,按照 ProGit 一书的相关知识就可以轻松搞定,实现了类似 Github 的使用 SSH + 私有 Clone 的方式。 关于部署,实际上是自动部署,起初的想法是使用 bash shell 制定一个定时任务去不断 git pull 产品代码,后来记得 Git 带有 Hooks,索性在ProGit 一书翻了翻: Git 本身可以调用自定义的挂钩脚本,其中有两组:客户端和服务器端。

最近在某服务器上面搭建 git 开发和部署环境,git 开发环境很简单,按照 ProGit 一书的相关知识就可以轻松搞定,实现了类似 Github 的使用 SSH + 私有 Clone 的方式。

关于部署,实际上是自动部署,起初的想法是使用 bash shell 制定一个定时任务去不断 git pull 产品代码,后来记得 Git 带有 Hooks,索性在ProGit 一书翻了翻:

Git 本身可以调用自定义的挂钩脚本,其中有两组:客户端和服务器端。客户端挂钩用于客户端的操作,如提交和合并。服务器端挂钩用于 Git 服务器端的操作,如接收被推送的提交。详情请查看 ProGit 相关章节

如果这样就简单了,利用服务器端调用想要的挂钩(Hook),即可实现自动部署的方案,为了保证不被肆意部署,特加了一个对需要部署 commit 的判断,利用读取 commit subject 并匹配想要的字符串才去部署,这样我认为是一个比较安全的部署方案。

Git的挂钩(Hook)主要包含:

  • applypatch-msg
  • post-update
  • pre-rebase
  • commit-msg
  • pre-applypatch
  • update
  • post-commit
  • pre-commit
  • post-receive
  • prepare-commit-msg

这里我们只需要使用 post-receive 这个 Hook:在接收 post(push)
请求之后执行。其他大部分我也没有大多研究,不过看名字不算难理解,我觉得其中大部分包含 commit 的属于客户端。

好了,部署开始:

​1. 在服务器 git 仓库(注意是 bare 仓库,不是代码仓库)的 Hooks,编辑
post-receive(如果没有自行创建),代码请看:

http://gist.github.com/566767):

这里会先判断脚本所在目录是否是 bare git 仓库,然后获取最新 commit 的 subject,并匹配是否包含 [deploy] 字样,如果包含,则继续检查产品代码仓库路径是否存在,如果存在则执行 git pull 操作。

​2. 对刚才编辑的 post-receive 执行下面命令以保证脚本可执行:

$ chmod +x post-receive

​3. 完成!


对于自定义脚本,其实不仅限于 bash shell,你可以使用你熟悉的语言,然后把你的脚本路径在 hooks 脚本中加载即可。

脚本还会继续更新,下面需要增加关于测试部分的相关判断和部署。 bash shell 还需要进一步学习,上面脚本是我第一次写,如有不妥之处,请指教,感谢!

如何联系我:【万里虎】www.bravetiger.cn 【QQ】3396726884 (咨询问题100元起,帮助解决问题500元起) 【博客】http://www.cnblogs.com/kenshinobiy/
目录
相关文章
|
8月前
|
存储 前端开发 开发工具
Git Hooks实战:提交前检查修改文件中是否包含调试代码
Git Hooks实战:提交前检查修改文件中是否包含调试代码
118 0
|
前端开发 开发工具 git
一个 git 仓库下拥有多个项目的 git hooks 配置方案
一个 git 仓库下拥有多个项目的 git hooks 配置方案
232 0
|
Shell 开发工具 git
git hooks
如同 flask 框架的请求钩子一样,git 也有钩子 (hook) 的概念,下面就让我们一起来看看吧。
|
Devops 测试技术 开发工具
devops| git hooks 实战: 防分支 merge
基于工作中 git 工作流遇到的问题, 实战 git hooks, 防止测试分支合并到开发分支
603 0
|
前端开发 JavaScript Shell
手写 git hooks 脚本(pre-commit、commit-msg)
手写 git hooks 脚本(pre-commit、commit-msg)
719 0
|
缓存 前端开发 JavaScript
CI 从Git hooks学起
前端工程化 前端工程化是前端的一个重要领域,简单的从代码规范开始,复杂的到团队脚手架搭建。在小团队中大多由开发兼任,在大团队中则可能有专门的基建团队负责。可见工程化的普及度是非常高的,只是不同团队的水平或复杂度参差不齐。 工程化对于前端开发是个必备技能。不说要学的多深多厉害,起码能 hold 住一个普通项目。我们先从 Git 的 hooks 学起,这是很多自动化的关键。
|
Shell 开发工具 数据安全/隐私保护
Git提交之后自动打版本并钉钉通知
Git提交之后自动打版本并钉钉通知
474 0
Git提交之后自动打版本并钉钉通知
|
开发工具 git C++
Git 进阶系列 | 3. 基于 Pull Request 实现更好的协作
Git 进阶系列 | 3. 基于 Pull Request 实现更好的协作
254 0
Git 进阶系列 | 3. 基于 Pull Request 实现更好的协作
|
IDE Shell 开发工具
在 Swift 中编写脚本:Git Hooks
这周,我决定完成因为工作而推迟了一周的 TODO 事项来改进我的 Git 工作流程。
200 1
在 Swift 中编写脚本:Git Hooks
|
网络安全 开发工具 数据安全/隐私保护
Git 实现连接 Github 远程仓库、拉取、推送本地文件
本地写的代码想推送到 Github 上面,可以借助 Git 命令实现,总结起来简单好用,阅读教程之前请确保你已经安装好 Git 软件;