jenkins自動獲取svn版本號並選擇版本號構建


需求背景:

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

 

 

結束


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM