返回顶部

jenkins自动获取svn版本号并选择版本号构建

需求背景:

 jenkins经常跟源码管理工具svn或者git结合组成强大持续集成工具,在某些情况下,需要人工进行参数化构建,比如输入指定版本的svn版本号进行构建,为了减少人工输入,这里提供了一个人工选择svn版本号后进行构建的方法。

 

最终效果:

下面这个效果,我是展示出了多个字段(当然这是可以通过后续给出的脚本进行修改的),在后续使用"Version"这个变量的时候,还需要进行字段切割,获取出第一列的数字部分,这个也不难。

 

详细步骤:

1.安装插件Dynamic Parameter Plug-in

提醒目前可能已经搜索不到该插件,可以使用active choices这个插件代替

 

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条)。

 

 

结束

posted @ 2020-06-18 20:12  Adrian·Ding  阅读(5608)  评论(0编辑  收藏  举报