SVN怎么触发Jenkins自动构建
[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( )
推荐阅读
-
SVN怎么触发Jenkins自动构建
-
自动构建神器:Jenkins与Coding的无缝协作
-
Jenkins cron 定时构建触发器--示例:
-
Jenkins 自动构建 CI/CD 管道学习笔记(从入门到上手,理论 + 示例)
-
Jenkins + Gitee 自动代码构建(超级详细)
-
Jenkins 自动构建 CI/CD 管道学习笔记(从开始到落地,理论+实例)--一套完整的 Devops Jenkinsfile 管道
-
Jenkins+Maven+Svn 实现代码自动打包和发布
-
实操Vue项目 Jenkins 自动化构建技巧
-
在Jenkins上执行自动化项目时,如果案例出错会导致项目运行时间变长,应该怎么解决呢?
-
jenkins + bitbucket 实现 pr自动构建及build状态通知