博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
git hooks 远程部署
阅读量:6654 次
发布时间:2019-06-25

本文共 3028 字,大约阅读时间需要 10 分钟。

个人项目管理发布方案 (java maven 项目)

  • 最原始的方式应该是本地打包,ftp到服务器部署了吧
  • 在服务器上装好git,maven环境,本地push到仓库,登录到服务器,pull下代码,编译,打包,发布(目前我就是这样做的)
  • 现在才知道git hook这个功能,真是惭愧,我们可以通过配置git hook实现自动部署,下面就记录下简单流程

1) 什么是Git 钩子?

2) 和其它版本控制系统一样,Git 能在特定的重要动作发生时触发自定义脚本。 有两组这样的钩子:客户端的和服务器端的。 客户端钩子由诸如提交和合并这样的操作所调用,而服务器端钩子作用于诸如接收被推送的提交这样的联网操作。 你可以随心所欲地运用这些钩子。
3) 钩子都被存储在 Git 目录下的 hooks 子目录中。 也即绝大部分项目中的 .git/hooks 。 当你用 git init 初始化一个新版本库时,Git 默认会在这个目录中放置一些示例脚本。这些脚本除了本身可以被调用外,它们还透露了被触发时所传入的参数。 所有的示例都是 shell 脚本,其中一些还混杂了 Perl 代码,不过,任何正确命名的可执行脚本都可以正常使用 —— 你可以用 Ruby 或 Python,或其它语言编写它们。 这些示例的名字都是以 .sample 结尾,如果你想启用它们,得先移除这个后缀
4) 把一个正确命名且可执行的文件放入 Git 目录下的 hooks 子目录中,即可激活该钩子脚本。 这样一来,它就能被 Git 调用。 接下来,我们会讲解常用的钩子脚本类型。

简称服务器端称为 "S"

简称本地开发端称为 "C"

1.首先在S端操作,建立"裸仓"

1) 什么是"裸仓",那先要了解下 git initgit init --bare 的区别。

2) bare汉语意思是:裸。这样初始化的仓库只会记录git历史提交的版本信息,不允许用户在上面操作的,把他当作“只读”看待。
3) 我们下面就建立一个“裸仓”,“C”端开发好的代码将push到这里。
4) ”裸仓“文件夹通常以'xxx.git'方式命名。

mkdir test.gitcd test.git/git init --bare ll -a #看下加了参数与不加参数有什么区别drwxr-xr-x 2 root root 4096 11月 27 14:33 branches-rw-r--r-- 1 root root   66 11月 27 14:33 config-rw-r--r-- 1 root root   73 11月 27 14:33 description-rw-r--r-- 1 root root   23 11月 27 14:33 HEADdrwxr-xr-x 2 root root 4096 11月 27 14:33 hooksdrwxr-xr-x 2 root root 4096 11月 27 14:33 infodrwxr-xr-x 4 root root 4096 11月 27 14:33 objectsdrwxr-xr-x 4 root root 4096 11月 27 14:33 refs
2.在"S"端建立打包的项目的地方

1) 从"裸仓" clone 到这里,就在这个代码里执行maven打包指令

mkdir workspace cd workspace git init  git clone ../test.git chmod -R 777 ../workspace
3.在"S"端修改”钩子“文件

1) 返回 "裸仓" ,hooks下面存放着可配置文件,以.sample结尾,使用的时候拷贝一份进行编写

2) 官方文档对这些钩子的定义 https://git-scm.com/book/zh/v2/%E8%87%AA%E5%AE%9A%E4%B9%89-Git-Git-%E9%92%A9%E5%AD%90
3)查看文档,这里需要用到post-receive,但当前版本居然没有该默认配置,自己建一个吧
4)post-receive 官方描述:
post-receive 挂钩在整个过程完结以后运行,可以用来更新其他系统服务或者通知用户。 它接受与 pre-receive 相同的标准输入数据。 它的用途包括给某个邮件列表发信,通知持续集成(continous integration)的服务器,或者更新问题追踪系统(ticket-tracking system) —— 甚至可以通过分析提交信息来决定某个问题(ticket)是否应该被开启,修改或者关闭。 该脚本无法终止推送进程,不过客户端在它结束运行之前将保持连接状态,所以如果你想做其他操作需谨慎使用它,因为它将耗费你很长的一段时间。

cd  /test.git/hooksll-rwxr-xr-x 1 root root  452 11月 27 14:33 applypatch-msg.sample-rwxr-xr-x 1 root root  896 11月 27 14:33 commit-msg.sample-rwxr-xr-x 1 root root  189 11月 27 14:33 post-update.sample-rwxr-xr-x 1 root root  398 11月 27 14:33 pre-applypatch.sample-rwxr-xr-x 1 root root 1704 11月 27 14:33 pre-commit.sample-rwxr-xr-x 1 root root 1239 11月 27 14:33 prepare-commit-msg.sample-rw-r--r-- 1 root root 1348 11月 27 14:33 pre-push.sample-rwxr-xr-x 1 root root 4951 11月 27 14:33 pre-rebase.sample-rwxr-xr-x 1 root root 3611 11月 27 14:33 update.sample

vim post-receive

#!/bin/shlocalPath='pwd'workPath= "/home/workspace"cd $workPathgit pullecho '更新完成'mvn clean packageecho '打包完成'#调用用发布脚本,重启服务等,根据自己的项目定#hook_publish.shecho '发布完成'cd $localPathexit 0
chmod +x post-receive
4.本地开发环境推送代码

1) 本地项目根目录下添加remote推送目的。

2)当本地向目标源推送代码时,会触发我们配置的post-receive钩子

#设置自己的远程服务ip,22为默认端口,可以不用写git remote add deploy root@xx.xx.xx.xx:22:/test.git#代码修改后,git add .git push deploy master#可能需要输入服务器密码...

转载于:https://www.cnblogs.com/DonneZhang/p/git_hooks.html

你可能感兴趣的文章
easyui的分页组件的displayMsg显示的信息不正确
查看>>
MySQL数据库入门——多实例配置
查看>>
ACtiiveMQ安装 Ubuntu
查看>>
四色原则
查看>>
1.sql数据处理问题
查看>>
企业管理:如何规范员工上网行为,提高员工工作效率
查看>>
LINUX创建、删除用户和用户组;修改密码
查看>>
深入理解乐观锁与悲观锁
查看>>
CocoaPods的使用
查看>>
find命令详解
查看>>
变频电源内部IGBT模块的作用是什么样的
查看>>
手机PDF文件怎么压缩得更小,PDF文件如何压缩?
查看>>
超声波清洗机对人体有辐射,有伤害吗?
查看>>
区块链成多地政府工作报告新热词
查看>>
论职场沟通的重要性
查看>>
velocity模板中后台返回html,前端无法跳转页面
查看>>
AJPFX:如何保证对象唯一性呢?
查看>>
天禹智控--现场标准气体如何使用?
查看>>
CSS3:border-radius隐藏的威力
查看>>
springMVC 返回类型选择 以及 SpringMVC中model,modelMap
查看>>