php svn钩子,svn钩子(POST-COMMIT)+jenkins 代码上线流程

5688c3cc5f35767e0f32fa7029a23bf8.png

综上所述,一个通过svn的钩子结合的Jenkins独有的特性,来构建这个网站代码上线的架构吧!不多啰嗦了。

svn钩子脚本的配置(在你当前svn的当前的版本库下修改)

/svn/test/hooks/post-commit

REPOS="$1"

REV="$2"

LANG=en_US.UTF-8

LOGFILE=/var/log/svn.log    # 钩子脚本的日志

# 脚本的标准输出和标准错误输出都打印到日志文件里

exec 1>>"$LOGFILE"

exec 2>&1

SVNLOOK=/usr/bin/svnlook

TIME=$(date "+%Y-%m-%d %H:%M:%S")

AUTHOR=$($SVNLOOK author -r $REV "$REPOS")  #提交作者

CHANGEDDIRS=$($SVNLOOK dirs-changed $REPOS) #修改的目录集合

MESSAGE=$($SVNLOOK log -r $REV "$REPOS")    #提交时的备注信息,不建议用中文

# SVN客户端配置,需要自行修改**********************************

CLIENTSVNROOT=/data/www    #WEB服务器的代码根目录

SVNUSER="tiantian"

SVNPASSWD="123456"

#**************************************************************

function myecho() {

echo "$TIME" "$*"

}

myecho "**************************************************************"

myecho "提交版本:$REV 作者:$AUTHOR"

myecho "提交备注:$MESSAGE"

myecho "修改目录:$(echo $CHANGEDDIRS | tr '\n' ' ')"

MASTERDIR=$(echo "$CHANGEDDIRS" | head -1)  #CHANGEDDIRS里的主目录

# 遍历提交的代码目录,同步到WEB服务器上

while [ "$CHANGEDDIRS" != "" ];do

PROJECT=$(echo $MASTERDIR | awk -F / '{print $1}')

# 判断项目文件夹

if [ "$PROJECT" == "php" ];then

myecho

myecho "项目:$PROJECT 同步目录:$MASTERDIR"

myecho "同步 $MASTERDIR 到 $CLIENT1:$CLIENTSVNROOT/$MASTERDIR"

# 无密码ssh连接到客户端服务器,执行svn up

SVN=/usr/bin/svn

svn up --non-interactive --username $SVNUSER --password $SVNPASSWD /$CLIENTSVNROOT/$MASTERDIR

if [ $? -eq 0 ]

then

/usr/bin/rsync -az --delete $CLIENTSVNROOT /tmp/  #临时目录

fi

elif [ "$PROJECT" == "tianshi" ];then

myecho

myecho "项目:$PROJECT 同步目录:$MASTERDIR"

myecho "同步 $MASTERDIR 到 $CLIENT2:$CLIENTSVNROOT/$MASTERDIR"

svn up --non-interactive --username $SVNUSER --password $SVNPASSWD /$CLIENTSVNROOT/$MASTERDIR

if [ $? -eq 0 ]

then

/usr/bin/rsync -az --delete $CLIENTSVNROOT /tmp/   #临时目录

fi

else

:

fi

# 在目录集合里删除已经同步好的目录

CHANGEDDIRS=$(echo "$CHANGEDDIRS" | grep -v "^$MASTERDIR")

# 获取新的需要同步的主目录

MASTERDIR=$(echo "$CHANGEDDIRS" | head -1)

done

别忘了给钩子授权  chmod 755 post-commit

3.关于临时目录的要授予Apache权限和svn提交文件克隆

chown apache:apache -R /data/www

chown apache:apache -R /tmp/

chown apache:apache -R /var/log

svn提交文件克隆命令

svn co svn://192.168.40.128  --username tiantian --password 123456 /data/www

不操作这条命令会造成没权限法提交

2016-01-14 03:35:20 项目:php 同步目录:php/

2016-01-14 03:35:20 同步 php/ 到 :/data/www/php/

Skipped '/data/www/php'

4.版本控层已经写好了,看效果吧

c0e050f6da1bcc24393ba8288ff9a3a4.png

13a493131cf4cae038d1eae6178845f2.png

5.jenkins项目的创建

f9d5662694d3a8b72dd6275ce10d52b8.png

5341e7a28808132f49ee13dcce366530.png

主要是两个方面,一是源码管理,二是构建触发器,配置信息如下(其中* * * * *,即表示每分钟检测一遍代码,若发现有更新则自动触发构造项目)

40c56f51b6e69a12a3ec011e60d911c1.png

6. Jenkins每次构建数据的同事执行同步的数据(rsync软件同步)

ee3f3a4c1538dbf308b18b19a8ec4cfb.png

查看构建的结果

74d90f083ef7ba4fc6e6ad3091ab977d.png

7.查看测试结果

e98046a8dfd4e5b98cd474f46b75e708.png

总结:

svn+jenkins构建可持续化的程序。重点控制的环节在于svn版本的控制。

总结有些很简介。后续再添加吧。我也是小白。黑黑!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值