zoukankan      html  css  js  c++  java
  • 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('
    ')

     说明:只需要填写以上截图出来的两个位置内容。

    附 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('
    '):
                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条)。

    结束

  • 相关阅读:
    vue框架,后端框架选型
    appium,元素定位和元素操作,使用uiautomatorviewer
    appium,参数化,数据驱动
    Qt 应用程序无法正常启动0xc000007b
    NOI2021 游记
    NOI 2021 游记
    NOI2021 看台风记
    NOI2021 部分题目题解
    NOI2021游记
    vectorized case branch
  • 原文地址:https://www.cnblogs.com/ding2016/p/13159569.html
Copyright © 2011-2022 走看看