朝花夕拾|勿忘初心 朝花夕拾|勿忘初心

Git Hooks实现项目的自动部署

in 杂七杂八 read (408) 675汉字 站长Lucifaer 文章转载请注明来源!

最近把自己的wiki重新更新了一下版本,正好以前的服务器到期,把新版本的wiki迁移到新的服务器上,顺手把之前配置的代码自动部署的过程记录下来。

实现项目的自动部署,最简便的方法就是利用git hooks这个方法。

0x00 什么是git hooks

简单来理解一下,就是一个可以hookgit操作,根据git操作来处理之后动作的触发式自定义脚本。

git hooks有两种类型的钩子:客户端和服务端。

客户端的钩子有:

  1. pre-commit 钩子在commit前运行
  2. prepare-commit-msg 钩子在启动提交信息编辑器前,默认信息被创建后运行。
  3. post-commit 钩子在commit过程完成后运行,对应着的是git commit之后的操作
  4. applypatch-msg 该钩子将提交信息进行格式化规范,或修正格式错误
  5. pre-applypatchgit am期间运行
  6. post-applypatch 运行于提交后产生,是在git am运行期间最后被调用的钩子
  7. pre-rewrite 钩子被那些会替换提交记录的命令调用
  8. post-checkoutgit checkout成功运行后调用
  9. post-mergegit merge成功运行后调用
  10. pre-pushgit push运行期间,更新了远程引用但尚未传送对象时被调用
  11. pre-auto-gc 在垃圾回收前被调用

服务端的钩子有:

  1. pre-receive 处理来自客户端的推送操作时最先被调用
  2. update 它会为每一个准备更新的分支各运行一次
  3. post-receive 在整个过程完成以后运行,可以用来更新其他系统服务或者通知用户

0x01 使用git hooks

所有的钩子脚本都存放在.git/hooks目录中。当使用git init初始化一个新仓库时,Git默认会子啊这个目录中放置一些示例脚本。这些示例的名字都是以.simple结尾的,如果你想启用他们,首先要移除该后缀,或者重新创建该文件。

服务端部署

在服务端部署远程仓库,使用的是git init --bare

$ mkdir D0g3_wiki.git
$ cd D0g3_wiki.git/
$ git init --bare

效果如图:

之后需要我们要在/hooks/下创建post-receive,并写一段shell脚本来自定义我们需要post-receive钩子完成的自定义任务:

post-receive

#!/bin/sh
GIT_REPO=/root/D0g3_wiki.git
TMP_GIT_CLONE=/tmp/D0g3_wiki
PUBLIC_WWW=/home/lucifaer

echo "init receive"
rm -rf $TMP_GIT_CLONE
if [ -d $PUBLIC_WWW ]; then
    mkdir -p $PUBLIC_WWW
fi

git clone $GIT_REPO $TMP_GIT_CLONE
# sudo rm -rf /srv/http/hack_web/hack_web
# sudo cp -r $TMP_GIT_CLONE/hack_web $PUBLIC_WWW
#if [[ $EUID -eq 0 ]]; then
rsync -av $TMP_GIT_CLONE $PUBLIC_WWW
chown -R lucifaer:lucifaer $PUBLIC_WWW
#fi
rm -rf $TMP_GIT_CLONE

这里是利用了rsync命令来完成远程数据同步,并设定了同步目录为/home/lucifaer

完成了shell脚本的编辑后,给该脚本添加可执行权限:

$ chmod +x post-receive

至此完成了服务端的部署。

客户端部署

客户端并不需要特别的部署什么样的环境,只需要将需要给需要同步的项目建立仓库,并设置remote源就好了。

比如我要将本地的secspider项目同步到服务端:

首先给该项目建立本地仓库:

$ cd secspider
$ git init .
$ git add .
$ git commit -m "test git hooks"

之后添加remote源:

$ git remote add nick_name user@ip:/gitrepo_dir
$ git push nick_name master

这里的nick_name、user、ip设置成自己的名字。

便同步成功了。

git
最后由Lucifaer修改于2018-02-28 11:01

此处评论已关闭

博客已萌萌哒运行
© 2018 由 Typecho 强力驱动.Theme by Yodu
PREVIOUS NEXT
雷姆
拉姆