Git hooks发布代码到多服务器(centos7)

配置前提:

1台开发电脑,我本地是windows10,(主要用来提交开发的网站代码)

1台git服务器,已安装好git环境。本案例所用服务器ip为192.168.32.131,centos7系统,

n台web服务器(下文都以web服务器统称)。本案例用了3台服务器,ip分别为192.168.32.128,192.168.32.129,192.168.32.130,centos7系统

达到目的:

在开发电脑上开发好网站,向git服务器push更新,如果提交的描述带有发布release_new_version(当然也可以自己配置)的字眼,就把代码更新发布到多台web服务器。

配置步骤:

1,看系统原来有没有rsync,如果有,先删除,以防以前版本太旧,配置不成功(web服务器上执行)。

$ yum remove rsync    (注意不要在git所在服务器执行此操作,有可能会删除git,因为git依赖了rsync)

2,安装同步工具rsync(git服务器和web服务器上都要执行此步)

$ wget https://download.samba.org/pub/rsync/src/rsync-3.1.2.tar.gz

$ tar -zxvf rsync-3.1.2.tar.gz

$ cd rsync-3.1.2

$ ./configure --prefix=/usr/local/rsync

$ make

$ make install

$ ln -s/usr/local/rsync/bin/rsync  /usr/local/bin/rsync

3,编辑rsync启动所需要的配置文件(web服务器执行)

$ mkdir/usr/local/rsync/etc  /usr/local/rsync/var

$ mkdir /usr/local/rsync/var/run  /usr/local/rsync/var/log

$ cd /usr/local/rsync/etc

$ vim rsyncd.conf    内容如下

#global settings

pid file = /usr/local/rsync/var/run/rsyncd.pid

port = 873

lock file = /usr/local/rsync/var/run/rsyncd.lock

log file = /usr/local/rsync/var/log/rsync.log

gid = root

uid = root

#

##module settings

[www] #写模块,到时要在git所在服务器的同步配置中指定此模块名www

path = /home/wwwroot/advanced/

use chroot = no

max connections = 15

read only = no

list = no

ignore errors = yes

timeout = 120

secrets file = /usr/local/rsync/etc/rsyncd.secrets

hosts allow = 192.168.32.131  #限制ip,只有git仓库所在服务器才有同步权限

$ vim rsyncd.secrets  内容如下

rsync:123456

4,编辑服务脚本(web服务器上执行)

$ vim/etc/init.d/rsync  内容如下

#!/bin/bash

#this script for start|stop rsync daemon service

#date:2017/11/3

status1=$(ps -ef | egrep "rsync --daemon.*rsyncd.conf" | grep -v'grep')

pidfile="/usr/local/rsync/var/run/rsyncd.pid"

start_rsync="/usr/local/rsync/bin/rsync --daemon--config=/usr/local/rsync/etc/rsyncd.conf"

function rsyncstart() {

if [ "${status1}X" =="X" ];then

rm -f $pidfile

${start_rsync}

status2=$(ps -ef | egrep"rsync --daemon.*rsyncd.conf" | grep -v 'grep')

if ["${status2}X" != "X"];then

echo "rsync servicestart.......OK"

fi

else

echo "rsync service isrunning !"

fi

}

function rsyncstop() {

if [ "${status1}X" !="X" ];then

kill -9 $(cat $pidfile)

status2=$(ps -ef | egrep"rsync --daemon.*rsyncd.conf" | grep -v 'grep')

if [ "${statusw2}X" =="X" ];then

echo "rsync servicestop.......OK"

fi

else

echo "rsync service is notrunning !"

fi

}

function rsyncstatus() {

if [ "${status1}X" !="X" ];then

echo "rsync service isrunning !"

else

echo "rsync service is notrunning !"

fi

}

function rsyncrestart() {

if [ "${status1}X" =="X" ];then

echo "rsync serviceis not running..."

rsyncstart

else

rsyncstop

rsyncstart

fi

}

case $1 in

"start")

rsyncstart

;;

"stop")

rsyncstop

;;

"status")

rsyncstatus

;;

"restart")

rsyncrestart

;;

*)

echo

echo"Usage: $0start|stop|restart|status"

echo

esac

5,启动rsync(web服务器上执行)

$ service rsync start

6,编辑同步密码文件(git服务器上执行),假设文件放在/home/git目录下,可以自己指定。

$ vim  /home/git/rsync.passwd   内容如下(内容就是我们在以上步骤web服务器中配置的rsyncd.secrets密码部分的内容,一定要对应)

123456

7,进入网站代码所在git仓库钩子目录(如/home/git/repositories/advanced.git/hooks)(git服务器上执行)

$ cd /home/git/repositories/advanced.git/hooks

$ ls

$ cp post-update.sample post-update

$ vim post-update   内容如下

#!/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".

#此参数自己定,到时像发布时,commit–m这个参数

RELEASE_MSG="release_new_version";

LEN=`git log -1 | grep $RELEASE_MSG | wc -L`;

if [[ $LEN -gt 0 ]]; then

echo "发布代码到所有服务器";

GIT_REPO=$HOME/repositories/advanced.git

TMP_GIT_CLONE=$HOME/tmp/advanced

mkdir -p $TMP_GIT_CLONE

#从本机clone仓库到临时目录

git clone $GIT_REPO $TMP_GIT_CLONE

#进入到临时目录,并执行其中的deploy.sh

cd $TMP_GIT_CLONE && chmod +x deploy.sh && ./deploy.sh

echo 'deploying complete.'

#删除临时目录

rm -rf $TMP_GIT_CLONE

fi

8,创建deploy.sh脚本,放到代码的根目录,到时和代码一起提交到版本库(开发电脑上操作)。内容如下

#!/bin/bash

# current dir is the same as this script

# current user is git

# make sure /home/git/rsync.passwd is exist and has 600 permission ( for thersync password )

# need rsync 3.10+ support also server should be 3.10+

# 删除不需要发布的文件,这里根据自己的情况而定(由于此脚本执行的是上一步创建的临时目录,所以大胆删,同步完整个目录会被删除的)

rm -rf .git

rm -r .gitignore

rm -rf api/runtime/cache

rm -rf api/runtime/logs

rm -rf backend/runtime/cache

rm -rf backend/runtime/logs

rm -rf frontend/runtime/cache

rm -rf frontend/runtime/logs

#发布到3台web服务器(此处ip地址后的::www就是之前配置web服务器的synecd.conf里指定的模块,同步的时候,会自动同步到模块指定的目录)

rsync -av ./ rsync@192.168.32.128::www --chown=www:www --password-file=/home/git/rsync.passwd --exclude=deploy.sh

rsync -av ./ rsync@192.168.32.129::www --chown=www:www --password-file=/home/git/rsync.passwd --exclude=deploy.sh

rsync -av ./ rsync@192.168.32.130::www --chown=www:www --password-file=/home/git/rsync.passwd --exclude=deploy.sh

deploy.sh脚本所在目录如下图,在网站根目标。




9,提交deploy.sh到版本库,修改网站代码,提交测试(开发电脑上操作,要确定deploy.sh会被提交到版本库)

$ git add –all

$ git commit –am”release_new_version”(如果没有这个release_new_version参数,是不会同步的)

$ git push

结果如图,大功告成



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345

推荐阅读更多精彩内容