• 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执行;

  • 相关阅读:
    浅谈MySQL字符集
    思维导图_Python知识点
    思维导图_Linux文件系统及常用监控命令
    思维导图_Linux中的软件安装命令
    思维导图_Linux中的重要日志文件
    思维导图_Linux开机启动流程
    CentOS7.6中mysql实践
    搭建集群架构
    LNMP架构
    Day004_Linux基础_基础命令之tar打包解包
  • 原文地址:https://www.cnblogs.com/thrillerz/p/4062252.html
Copyright © 2020-2023  润新知