欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

SVN怎么触发Jenkins自动构建

最编程 2024-08-12 17:45:34
...

[root@gw hooks]# vim 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命令所在路径

svnlook = '/home/svn/csvn/bin/svnlook'

# Jenkins的地址

baseurl = 'http://172.31.2.8:8080'

# Jenkins用户和用户的api token

user_id = 'admin'

api_token = '0e5127a9b050097b14e72b1485cf5e39'

 

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

   request = urllib2.Request(url, data)

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

   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( ):

   # 获取uuid值

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

   with os.popen(command) as f:

       uuid = f.read( ).strip( )

 

   # 获取仓库变更信息

   command = r'%s changed --revision %s %s' % (svnlook, revision, repos_path)

   with os.popen(command) as f:

       data = f.read( ).strip( )

 

   # 获取crumb

   url = r'%s/crumbIssuer/api/json' % baseurl

   crumb_dict = json.loads(my_urlopen(url))

 

   # 触发Jenkins

   url = r'%s/subversion/%s/notifyCommit?rev=%s' % (baseurl, uuid, revision)

   header={'Content-Type':'text/plain', 'charset':'UTF-8', crumb_dict['crumbRequestField']:crumb_dict['crumb']}

   my_urlopen(url, data, header)

 

main( )