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 是一个非常有用的功能, ...
随机推荐
- 自己动手做AI:Google AIY开发工具包解析
2018年国际消费性电子展(CES)上,最明显的一个趋势是Amazon与Google的语音技术进驻战,如AmazonAlexa进驻到Acer笔电内,Google Assist进驻到KIA汽车内,其他如 ...
- 前端之JavaScript(二)
一.概述 本篇主要介绍JavaScript的BOM和DOM操作,在前端之JavaScript(一)中介绍了JavaScript基础知识 1.1.BOM和DOM BOM(Browser Object M ...
- Maven私有仓库搭建以及使用
一.使用Docker安装Nexus Docker search nexus docker pull docker.io/sonatype/nexus3 mkdir -p /usr/local/nexu ...
- 【转】SWFUpload使用指南
原文出自:http://www.runoob.com/w3cnote/swfupload-guide.html SWFUpload是一个flash和js相结合而成的文件上传插件,其功能非常强大.以前在 ...
- js 插件 issue
1 iscroll 5 和 lazyload 同时使用 转自 yinjie //lazyload var $scrollEle = $("#wrapper") $("i ...
- C++ STL 全排列
摘自爱国师哥博客https://www.cnblogs.com/aiguona/p/7304945.html 一.概念 从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元 ...
- vmvare fusion 8
http://jingyan.baidu.com/article/54b6b9c0f8830f2d583b47ce.html 补充:vmware tools 在上面,直接点击安装
- 软件工程 speedsnail 第二次冲刺10
20150527 完成任务:蜗牛碰到线后速度方向的调整:已经基本实现多方向的反射: 遇到问题: 问题1 反射角的问题 解决1 利用tan()三角函数 明日任务: 大总结.找到新问题.布置下一次冲刺方案
- 2018软工实践—Alpha冲刺(6)
队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 测试服务器并行能力 学习MSI.CUDA ...
- 软件定义网络(SDN)研究进展
写在前面 这是我入门SDN以来的第一篇论文,它是一篇中文综述,看起来相对容易.也让我对SDN有了进一步的认识.下面是我的一些心得. 全文框架 SDN 将数据平面与控制平面解耦合,简化了网络管理. SD ...