需求背景:
jenkins经常跟源码管理工具svn或者git结合组成强大持续集成工具,在某些情况下,需要人工进行参数化构建,比如输入指定版本的svn版本号进行构建,为了减少人工输入,这里提供了一个人工选择svn版本号后进行构建的方法。
最终效果:
下面这个效果,我是展示出了多个字段(当然这是可以通过后续给出的脚本进行修改的),在后续使用"Version"这个变量的时候,还需要进行字段切割,获取出第一列的数字部分,这个也不难。
详细步骤:
1.安装插件Dynamic Parameter Plug-in
2.进入job后勾选“参数化构建过程”
3.添加动态获取版本号的配置
String url = "http://1xx.xxx.xxx.xx7/svn/web" //这里列出url是为了方便针对不同个job项目配置不同的url def versions = "python3 /data/scripts/getSvnVer.py ${url}".execute().text.tokenize('\n')
说明:只需要填写以上截图出来的两个位置内容。
附 python脚本:
#!/usr/local/python3/bin/python3 import subprocess, sys def get_version(path, username, password, number=10): vList = [] vListCount = 0 logtxt = [] cmd = "svn log -l {0} --no-auth-cache {1} --username {2} --password {3}|grep -v '^$'".format(number, path, username, password) status, result = subprocess.getstatusoutput(cmd) if status == 0: for log in result.split('\n'): if log.startswith('---'): if vListCount > 0: vList.append(data) vListCount += 1 continue logdata = log.split('|') if len(logdata) > 1: logtxt = log.split('|') log = logtxt[2].strip().split(' ', 2) ctime = log[0] + ' ' + log[1] logtxt.remove(logtxt[2]) logtxt.remove(logtxt[2]) logtxt.append(ctime) else: data = dict() data['ver'] = logtxt[0].strip() data['user'] = logtxt[1].strip() data['time'] = logtxt[2] data['log'] = log.strip() return vList records = get_version(path=sys.argv[1], username="xxx", password="xxxxxx") for record in records: print("{0} - {1} - {2} - {3}".format(record['ver'],record['time'],record['user'],record['log']))
脚本思路:获取svn的用户提交日志,然后处理每一行,对有效的行进行字段切割和拼接组成一个字典,放入一个列表中,同理,生成多个字典,陆续放入到这个列表里,最终返回一个包含多个字典的列表。
说明:请在python3下运行该脚本,脚本设定了需要4个参数:path也就是输入的url,需要传入;username和password已经写死在了脚本里,可以根据需要修改;number是最终选项的个数(默认10条)。
结束