SVN跨服务器自动更新--实现文件分发
目标:SVN版本库提交,服务器中的工作拷贝能自动update。
实现方法:subversion, curl,php脚本实现,并且入mysql库来进行管理。改hosts文件来进行访问!提交触发钩子脚本时调用 curl 访问内网php脚本,内网内svn更新
基本思路:默认情况下,版本库的hooks子目录中包含各种版本库钩子模板。如下图:
钩子是通过版本库事件触发,例如新版本的创建或一个未版本化属性的修改。一些钩子(“pre hooks”)在事件发生前运行,可以用来报告发生了什么以及防止它发生。还有一些钩子(“post hooks”)在版本库事件之后发生,只是用来报告。这里我们要用post-commit钩子,在版本库提交事件发生后,更新服务器的工作拷贝。
深入了解hooks:对每种钩子的都有一个模板,通过查看这些脚本的内容,我们能看到是什么事件触发了脚本及如何给传递数据。要实际安装一个可用的钩子,我们需要在repos/hooks目录下安装一些与钩子同名(如 start-commit或者post-commit)的可执行程序或脚本。例如,在linux下,我们需要复制模板,去掉后缀名 .tmpl,自定义钩子的内容,并使之成为一个可执行地脚本;Windows用文件的扩展名来决定一个程序是否可运行,所以我们要使程序的基本名与钩子同名,同时,它的扩展名是Windows系统所能辨认的,例如exe、com和批处理的bat。
如何使用hooks:在版本库hooks目录下新建文件 post-commit 并输入如下内容保存:
#!/bin/sh
export LANG=en_US.UTF-8
# 以www身份更新svn
su - www -c "svn up /home/www/zmqnw_mobile --accept theirs-full" curl -s http://192.168.1.60/distribute?project=zmqnw_mobile
碰到问题:实际情况是,SVN服务端和需要自动更新的测试环境不在同一台服务器。svn update 命令无法触发远程服务器的更新。
解决方案:思路——在钩子里向测试服务器发送HTTP请求,测试服务器收到请求后,通过php的system函数本地调用svn up 命令,实现测试服务器的工作拷贝的更新。两件事情:
1.测试服务器安装 linux版svn客户端(下载地址,),在web根目录下新建svnupdate.php文件。代码如下:
<?php
empty($_GET['path']) && die('miss params');
$paramArr = explode('|||', $_GET['path']);
$path = $paramArr[0];
$username = isset($paramArr[1])?$paramArr[1]:'';
$password = isset($paramArr[2])?$paramArr[2]:'';
$res = exec("export LANG='zh_CN.GBK' && /usr/bin/svn up $path --username='$username' --password='$password'");
if (strpos($res, '修订版')!== false) echo '成功更新到5.211';
2.SVN服务器版本库中hooks目录下post-commit.bat 修改如下:
其中ab.exe是apache下的压测工具;参数path格式:测试服务器工作拷贝路径[|||SVN用户名[|||SVN密码]],若有特殊字符需urlencode。
碰到的新问题:在我们的配置中,php-fpm进程以www:www运行,在调用exec和system函数时,其参数中的命令也以www:www执行,而/usr/bin/svn的执行需要 root 身份,所以上面的svnupdate.php不可能成功更新工作拷贝。
解决方案:
让/usr/bin/svn可以以www:www执行;
SVN跨服务器自动更新--实现文件分发的更多相关文章
- linux 设置svn钩子实现自动更新
一.svn安装设置 1.安装svn启动 yum install subversion 2.建个svn的根目录,因为项目不止一个 mkdir -p /home/svn/3.新建一个新的空的版本仓库(su ...
- CentOS 7 环境下部署 SVN 并实现自动更新(版本库放在Tomcat下)
1.安装 SVN 1.1先检查是否有安装 svn rpm -qa subversion #没有什么显示就说明没有安装过yum remove subversion #如果有安装就运行删除老版本yum i ...
- ASP.NET、JAVA跨服务器远程上传文件(图片)的相关解决方案整合
一.图片提交例: A端--提交图片 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string u ...
- Wix 安装部署教程(十二) -- 自动更新WXS文件
上一篇分享了一个QuickWIX,用来对比两个工程前后的差异,但是这样还是很繁琐,而且昨天发现有Bug,目录对比有问题.这次改变做法,完全让程序自动去更新WXS文件,然后再用CCNet去自动编译,这样 ...
- git 利用hook 实现服务器自动更新代码
如何利用git的hook实现提交代码后自动更新? 因为个人开发经常需要提交代码,每次都需要连接服务器去pull代码,重启服务器就显得十分繁琐,因此github提供了一个时间钩子,用户push代码后可以 ...
- python自动更新pom文件
前言 项目越来越多,版本管理越来越麻烦,在项目上我使用 maven version 来进行版本管理.主要还是在分布式项目中模块众多的场景中使用,毕竟各个模块对外的版本需要保持统一. 关于这个插件如何使 ...
- C# protobuf自动更新cs文件
网上的教程大都是手动通过protoc编译, 比较难用 给当前工程添加"Google.Protobuf"和"Grpc.Tools"的引用(通过nuget), 然后 ...
- Centos6.8实现SVN提交后自动更新目录
1.创建svn目录 mkdir /var/www/project 2.从服务器的本地svn上checkout最新版本代码到www目录下的project文件夹,注意本地svn服务器地址和端口号是在启动s ...
- svn版本信息自动更新到源代码
背景:在线上代码和线下代码不一致时,用这个时间先比对是很重要的,首先看时间确定是不是最新的代码,再进行问题排查是很有必要的.Subversion 的 svn:keywords 是一个非常有用的功能, ...
随机推荐
- tomcat 设定自定义图片路径
1.问题 平常图片路径都是在项目目录下存放,都是ip地址+端口号+项目名+图片路径,因为项目需要要把图片从tomcat中分离出来,并且设置可以通过自定义地址访问自定义图片路径. 2.解决 在 tomc ...
- JUC——JUC开发简介(一)
前言 JUC是Java5.0开始提供的一组专门实现多线程并发处理的开发框架,利用JUC开发架构可以有效的解决实际线程项目开发之中出现的死锁.阻塞.资源访问与公平机制. 此笔记主要记录java.util ...
- windows下sublime text的node.js开发环境搭建
首先安装sublime text3,百度一堆,自己找吧.理论上sublime text2应该也可以.我只能说一句:这个软件实在是太强悍了. 跨平台,丰富的插件体系,加上插件基本上就是一个强悍的ide了 ...
- asp.net mvc access数据库操作
连接access数据库其实也简单,只要按照mvc的模式来就可以,遵循c v约定就可以 既然渲染试图是强类型,那么取得的数据就转换成强类型,其他一切和asp.net操作一样 DB mydb = new ...
- kettle_Spoon 修改共享DB连接带汉字引发的错误
win10下: kettle_Spoon 修改共享DB连接带汉字引发的错误: Unexpected problem reading shared objects from XML file : nul ...
- HTML5 本地裁剪上传图片
很多情况下用户上传的图片都需要经过裁剪,比如头像啊什么的.但以前实现这类需求都很复杂,往往需要先把图片上传到服务器,然后返回给用户,让用户确定裁剪坐标,发送给服务器,服务器裁剪完再返回给用户,来回需要 ...
- B. Counting-out Rhyme(约瑟夫环)
Description n children are standing in a circle and playing the counting-out game. Children are numb ...
- Scrum立会报告+燃尽图(十一月二十四日总第三十二次):视频剪辑
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2284 项目地址:https://git.coding.net/zhang ...
- Scrum立会报告+燃尽图 03
此作业要求:[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2190] 一.小组介绍 组长:王一可 组员:范靖旋,王硕,赵佳璐,范洪达,祁 ...
- Beta周第8次Scrum会议(11/17)【王者荣耀交流协会】
一.小组信息 队名:王者荣耀交流协会 小组成员 队长:高远博 成员:王超,袁玥,任思佳,王磊,王玉玲,冉华 小组照片 今天拍照的人是王磊.因此他没有出现在照片中. 二.开会信息 时间:2017/11/ ...