需求背景:
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條)。
結束