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

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

 

配置前提:

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

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服务器上执行)。

$ yumremove 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


$ cppost-update.sample post-update


$ vimpost-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 +xdeploy.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


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


$ gitpush



 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值