Windless
订阅/Feed
稗田千秋(i@wind.moe)

使用 Git Hooks 实现自动化部署

稗田千秋
Nov.11 2016 code

秉着御繁以简的原则,在参考了多种部署方式后,在 Windless 上最后选用了 Git Hooks 自动部署,解放了繁琐的操作,不必每一次提交都去服务端执行 git pull,不但慢且费时费力.

Git Hooks 字面上看就是 Git 提供的一种类似挂钩的工具,其实我更愿意称其为触发器(WE 后遗症,在特定的时机执行对应脚本.

下面是 Windless 的配置手札

新建远程仓库

Git Hooks 需要创建一个 bare 仓库,这是一个仅含 .git 文件的仓库,在这里我在用户目录下创建这个仓库

cd ~/inventory
git init --bare windless.git

在远程服务器上我的 Nginx 的 web 路径是指向 /srv/www 的,我也将博客后端存放在此文件夹,因此进入此文件夹

cd /srv/www
git init
git remote add origin ~/inventory/windless.git

配置 Git Hooks

然后回到第一步创建的 windless.git 文件夹,进入到 Hooks,可以看见里面是带着 .sample 后缀的文件,根据其文件名能大概推出某脚本在何时触发执行,在这里我们需要 post-receive 文件,即服务端收到 push 请求之后执行脚本,没有的话手动创建一个

cd ~/inventory/windless.git/hooks
touch post-receive

然后修改 post-receive 文件为想要运行的脚本指令

#!/bin/sh

unset GIT_DIR

DeployPath="/srv/www"

cd $DeployPath
git add . -A && git stash
git pull origin master

echo "Deploy Done."
exit 0

这里的 "git add . -A && git stash" 一句是因为有时会在服务端直接 Debug 修改代码,如果没有及时 commit,而此时客户端又发送了一个 push 请求,会导致 windless.git 里没有你在远程服务器修改的记录,却会在调用 hooks 脚本时出现错误导致实际并未部署,这样的话修正错误也要花费不少时间,因为暂存掉修改,之后可以丢弃它。

最后修改一下 post-receive 文件的执行权限

chmod +x post-receive

配置本地 remote 源

服务端的配置基本完成了,现在只需要进入本地代码文件夹,修改 .git/config 文件加上如下代码即可。

[remote "web"]
    url = git@github.com:forblackking/Windless.git
    url = chiaki@wind.moe:/home/chiaki/inventory/windless.git

之后需要提交更改时只需要运行 git push web 即可自动化部署代码辣~

--END--
文章创建于 2016-11-11 10:39:44,最后更新 2016-11-11 10:39:44
Comment
尝试加载Disqus评论, 失败则会使用基础模式.
    • play_arrow

    About this site

    version:1.02 Alpha
    博客主题: Lime
    联系方式: i@wind.moe
    写作语言: zh_CN & en_US
    博客遵循 CC BY-NC-SA 4.0许可进行创作

    此外,本博客会基于访客的Request Headers记录部分匿名数据用于统计(Logger的源码见Github),包含Referer, User-Agent & IP Address.个人绝不会主动将数据泄露给第三方