代码自动更新:SVN钩子解放你的双手

钩子是什么?

其实和回调是一个概念,当某个事情发生时就会调用你提供的方法,利用好SVN钩子可以大大的方便你的开发。
web开发人员,每次提交了代码都需要手动到服务器更新下代码才能看到效果。
今天我就教大家如何利用钩子自动化更新。

怎么使用?

下面我将以SVNBucket为例,如果你还没有SVNBucket帐号,点击注册

创建钩子示例图

如上图,点击添加钩子,我们需要填入 链接token触发条件

链接:就好比我们的回调方法,在你提交代码后就会自动调用这个链接,你收到调用后就可以执行代码更新了。

token:是一个可选的参数,在调用链接时会带上这个参数,可以用来检查调用是否来自SVNBucket。这里可以随意填写一个自己想要的参数就行了

触发条件:触发条件我们选择提交后,这样代码提交之后就会调用链接。

那么我们的链接填写什么呢?你需要自己写一个http服务,用来接收调用。

编写更新脚本

下面我以Python代码为例(PHP版本看文章最后),写一个简单的http服务来接收调用:

# -*- coding:utf8 -*-
# 注意:运行这个脚本的机器要安装SVN的客户端

import os
from bottle import run, request, post

@post('/onCommit')
def onCommit():

    # 参数有:
    # event: 事件名字,有 start-commit(提交前), post-commit(提交后)
    # token: 校验字符串
    # rev: 版本号( post-commit 事件才有值)
    # log:提交描述内容( post-commit 事件才有值),
    # user:提交者用户名
    # 高级技巧:利用好log、user参数可以做选择性的更新,比如判断log中包含“update”才进行服务器更新;
    param = request.params

    # 校验token,检查是不是自己在SVNBucket上配置的,防止恶意请求
    if param.get('token', '') == 'YourToken':
        # 调用shell脚本进行svn update
        output = os.popen('./up_and_restart.sh')
        print output.read()
    else:
        print 'token校验不对,忽略'
        return 'failed'
        
    return 'ok'


if __name__ == '__main__':
    run(host='0.0.0.0', port=8080, server='cherrypy')

这里我们用python的bottle框架搭建了一个简单的http服务来处理代码更新。根据这个可以自己实现一个其他语言的版本

在收到请求后我们就执行了一个shell脚本,这个shell脚本就是调用svn update去更新我们的代码了。

假设你的服务器IP是119.29.35.39,http服务的端口是8080,那么我们就应该配置上面的链接地址为:http://119.29.35.39:8080/onCommit

最终结果

配置好了后,我们可以点击测试按钮进行测试,这样就会手动的触发一次链接请求,并且在下面区域显示调用记录、是否成功

测试钩子

最后再提供一个PHP版本的供参考:

<?php

header("Content-Type: text/html; charset=utf-8");
header("Cache-Control:no-cache,must-revalidate");

// 参数有:
// event: 事件名字,有 start-commit(提交前), post-commit(提交后)
// token: 校验字符串
// rev: 版本号( post-commit 事件才有值)
// log:提交描述内容( post-commit 事件才有值)
// user:提交者用户名
// 高级技巧:利用好log、user参数可以做选择性的更新,比如判断log中包含“update”才进行服务器更新;
// 注意:运行这个脚本的机器要安装SVN的客户端
if($_POST['token'] === '你填写的Token值') 
{
    $username = '你的SVN用户名';
    $password = '你的SVN密码';
    $target_dir = '/data/www';

    exec("svn up --username $username --password $password --no-auth-cache $target_dir 2>&1", $output, $outresult);
    print_r("\noutput:$output, result:$outresult");
    if ($outresult ===0 )
    {
        echo '更新成功!';
        //echo print_r($output);
        return 'ok';
    }
    else
    {
        echo '更新失败!';
        echo print_r($output);
        return 'failed';
    }
}
else
{
    echo '数据校验失败,无效更新!';
    return 'failed';
}

其他相关教程

SVN快速上手
SVN常用命令
轻松解决SVN冲突
SVN 和 Git 的一些误解和真相
Mac用户SVN图形界面推荐
Eclipse安装SVN插件和检出代码
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
"Cannot checkout from svn: svn: E170013: Unable to connect to a repository at URL ‘https://****’ svn: E230001: Server SSL certificate verification failed: certificate issued for a different hostname, issuer is not trusted"错误的原因是无法连接到指定的URL,因为服务器的SSL证书验证失败。这可能是由于SSL证书是由不受信任的发行方为不同的主机名颁发的。 另一个错误"CHECKOUT can only be performed o"发生在你尝试提交代码时,可能是由于你没有足够的权限来执行CHECKOUT操作。这可能是由于你的SVN账户没有足够的权限或者SVN服务器配置有问题导致的。 为了解决第一个错误,你可以尝试使用正确的URL或者联系服务器管理员来解决SSL证书验证问题。你可以检查URL是否正确,确保SSL证书由可信的发行方颁发,并确保服务器配置正确。 对于第二个错误,你可以联系SVN管理员来获得适当的权限或者确认服务器配置是否正确。你还可以检查你的SVN账户是否在服务器上被正确设置。 另外,你提到自定义配置目录的问题,如果你不需要使用自定义配置目录,你可以取消相关设置,这可能会解决你的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【无标题】idea Cannot checkout from svn: svn: E170013:Unable to connect to a repository at URL](https://blog.csdn.net/weixin_43832850/article/details/121464576)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [SVN Err:CHECKOUT can only be performed on a version resource](https://download.csdn.net/download/weixin_38521169/14040647)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值