####前言

假如公司有很多项目,很可能你要自建git服务器,然后有不同的分支管理各个项目。尤其是web开发,每次push不仅在测试环境需要pull代码,
可能还有nginx,uwsgi,supervisor等都需要重启。那么有没有什么办法让你在push代码的时候触发这一系列的重新部署呢?

####思路和例子

假设你的开发分支是feature_example_develop(你要是在master分支直接push也可以,呵呵)有A,B,C等等同事都会往这个分支提交东西
测试环境的IP为192.168.22.34

  1. 在你的git版本库的hooks里面这些修改post-update(表示代码提交到版本库后触发)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/bin/sh
#
# An example hook script to prepare a packed repository for use over
# dumb transports.
#
# To enable this hook, rename this file to "post-update".
# 获取本次提交的分支名字
branch=$(git rev-parse --symbolic --abbrev-ref $1)
case "$branch" in
feature_example_develop)
echo This is a develop push
# 远程执行测试环境下的sync_develop_code.sh脚本
ssh dongwm@192.168.22.34 -p 9922 "source sync_develop_code.sh"
;;
master)
echo This is a master push
;;
*)
echo This is only some push ops.
;;
esac
exec git update-server-info
  1. 测试环境的更新环境脚本 sync_develop_code.sh
1
2
3
4
5
6
7
8
9
#! /bin/bash
# 切换到git版本库目录下
cd /home/dongwm/test_develop
# '拉'下最新代码
git pull origin feature_example_develop
# 重启supervisor管理的进程
sudo supervisorctl -c /home/dongwm/test_develop/server/supervisor_develop.conf restart all
# 重启uwsgi
sudo /etc/init.d/uwsgi restart

####一个很重要的问题

post-update不会检查你的代码是不是有问题,当提交了错误的代码会造成测试环境问题
解决办法:修改update钩子-在提交前对你设置的操作的执行的$?做判断-非0就会拒绝你的提交,在这个时候你可以做pylint/coverage/nosetests等,下次我再说我做的这个工作