svn关联Jenkins自动发布代码
Posted tanghu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了svn关联Jenkins自动发布代码相关的知识,希望对你有一定的参考价值。
SVN的仓库hooks的原理是这样的:
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( )
以上是关于svn关联Jenkins自动发布代码的主要内容,如果未能解决你的问题,请参考以下文章
通过jenkins构建发布普通网站(jenkins+nginx+svn)
如何使用 Jenkins 自动 svn tag 构建人工制品?