zoukankan      html  css  js  c++  java
  • svn关联Jenkins自动发布代码

     

    SVN的仓库hooks的原理是这样的: 当你对该仓库执行一些操作时,比如创建一个新的revision版本或修改一个未版本化的属性,就会触发hooks目录下的相应程序。操作的事件(或时间节点)是跟程序文件名相对应的。举个例子,post-commit,代表,你往该仓库提交完成后,如果此时hooks目录下有一个叫做post-commit的程序文件的话,该程序就会被触发执行。该程序文件可以是任意可执行的程序,比如shell脚本、python脚本、二进制程序等,它需要有可执行权限。

     

    SVN在执行该hooks文件时,同时会传入三个参数:该仓库的路径(REPOS)、修订版本号(REV)、事务名称(TXN_NAME,这个不知道什么鬼,不过也用不上)。在这里可以找到利用post-commit hook来触发Jenkins执行的示例脚本。

    1.登录到SVN服务器上,找到该仓库所在目录 /application/csvn/data/repositories/zixin_system_server/hooks 在该仓库目录下,有一个hooks目录,默认情况下该目录下有一些模板文件(.tmpl文件):

    /application/csvn/data/repositories/zixin_system_server/hooks 在该仓库目录下,有一个hooks目录,默认情况下该目录下有一些模板文件(.tmpl文件):

    2.在Jenkins中找到一个更新代码的用户,复制用户token后面在程序中可以通过该token来访问Jenkins。

    3.保持Jenkins跨站点请求伪造防护为启用。在"系统管理"→"全局安全配置"中,可以设置:

    4.对于需要被post-commit hook所触发的job,要启用它的"Poll SCM"选项:

    5.在SVN服务器上,所选仓库的hooks目录中,创建程序文件post-commit:

    #!/usr/bin/env python

    # -*- coding: utf-8 -*-

    import urllib2, sys, os, base64, json

    repos_path = sys.argv[1]

    revision = sys.argv[2]

    svnlook = '/application/csvn/bin/svnlook'

    baseurl = 'http://192.168.8.131:8080'

    user_id = 'tanghu'

    api_token = '1188bea2ed5866c6b936f03cb53f0a9a0a'

    def my_urlopen(url, data=None, header={ }):

    request = urllib2.Request(url, data)

    print "url:" + url

    base64string = base64.encodestring('%s:%s' % (user_id, api_token)).replace(' ', '')

    header['Authorization'] = 'Basic %s' % base64string

    for key in header:

      request.add_header(key, header[key])

    try:

      response = urllib2.urlopen(request)

    except urllib2.URLError as e:

      print '[Exception URLError]:', e

      sys.exit(1)

    else:

      result = response.read( )

    finally:

      if 'response' in vars( ):

          response.close( )

    return result

    def main( ):

      command = r'%s uuid %s' % (svnlook, repos_path)

      with os.popen(command) as f:

      uuid = f.read( ).strip( )
  • 相关阅读:
    matplotlib讲义
    车间调度问题(part3: 遗传算法)
    sympy库和matplotlib库简介
    python列表
    第十周周三练习
    第十一周周一练习题
    MyEcplise中关于部署文件不成功的问题
    Java中的get()和set()方法
    Java中this关键字的使用
    信号完整性问题的几个基本原则
  • 原文地址:https://www.cnblogs.com/tanghu/p/12617883.html
Copyright © 2011-2022 走看看