• [Python]通过 python-jenkins 启动需要参数的job | jenkins接口


    需求:

    我要用python通过api,启动这个job,并且启动这个job需要1个参数 

    安装依赖:

    pipenv install python-jenkins

    熟悉API的使用方法:

    了解一个API的最好办法,就是先看它的 官方文档,

    从中找到自己需要的方法 ,弄明白要给方法传什么参,参数类型,返回值类型

    然后再做一个小demo,验证自己的想法,顺便也能熟悉一下这个api

     

    我从官方文档中找到下面这3个方法,正是我需要的:

    • build_job用来启动job
    • get_build_console_output用来获取job的构建日志
    • get_queu_info用来获取 pending状态 的job

    build_job(nameparameters=Nonetoken=None)

    Trigger build job.

    This method returns a queue item number that you can pass to Jenkins.get_queue_item(). Note that this queue number is only valid for about five minutes after the job completes, so you should get/poll the queue information as soon as possible to determine the job’s URL.

    Parameters:
    • name – name of job
    • parameters – parameters for job, or Nonedict
    • token – Jenkins API token
    Returns:

    int queue item

    get_build_console_output(namenumber)

    Get build console text.

    Parameters:
    • name – Job name, str
    • number – Build number, int
    Returns:

    Build console output, str

    get_queue_info()
    Returns: list of job dictionaries, [dict]
    Example::
    >>> queue_info = server.get_queue_info()
    >>> print(queue_info[0])
    {u'task': {u'url': u'http://your_url/job/my_job/', u'color': u'aborted_anime', u'name': u'my_job'}, u'stuck': False, u'actions': [{u'causes': [{u'shortDescription': u'Started by timer'}]}], u'buildable': False, u'params': u'', u'buildableStartMilliseconds': 1315087293316, u'why': u'Build #2,532 is already in progress (ETA:10 min)', u'blocked': True}

    创建测试工程:

    接下来创建1个测试job,验证自己的想法

    启动该job,需要传递1个字符型参数,参数名是Para1,默认值是:参数1

     

     在shell中打印Para1的参数值:

     

     代码示例:

    import jenkins
    
    #定义远程的jenkins master server 的url以及Port
    jenkins_server_url = 'http://10.2.1.92:8080/jenkins/'
    #定义用户的userid 和 apitoken(在jenkins中生成)
    user_id = 'admin'
    api_token = '11d8c79994b1e6d554c857b1d96fcf4dfe' #测试服务器
    
    #实例化jenkins对象,连接远程的jenkins master server
    server = jenkins.Jenkins(jenkins_server_url,username=user_id,password=api_token)
    print(server)
    
    name ='pubTest1'
    parameters={'Para1':'Python启动带参数的job'} #dict类型
    #构建job(带参数) server.build_job(name,parameters)

    构建结果:

     

     这样就通过 python启动了带参数的job

    接下来,通过get_build_console_output方法 打印job的构建日志

    #获取job的最后次构建号
    lastbuildNumber=server.get_job_info(name)['lastBuild']['number']
    
    #输出构建日志
    log=server.get_build_console_output(name,lastbuildNumber)
    print(log)

    结果如下:

    由用户 admin 启动
    构建中 在工作空间 /root/.jenkins/workspace/pubTest1 中
    [pubTest1] $ /bin/sh -xe /usr/local/tomcat/apache-tomcat-8.5.40/temp/jenkins3208269061259629186.sh
    + echo Python启动带参数的job
    Python启动带参数的job
    Finished: SUCCESS

    最后,通过get_queue_info获取pending状态的job列表

    使用场景:

    通过 api启动job后,这个job会有一段pending状态,这个时间如果用get_build_info是获取不到正在pending状态job信息的.

    所以可以这样判断:

    如果job出现在queue_info中,则等待一段时间再获取 get_build_info,直到job不出现在queue_info中,则表明job已经启动成功/失败.

    代码示例:

    #获取正在排队构建的job队列 即pending状态中的所有job,如果没有 pending状态的job即返回1个空列表
    queue_info=server.get_queue_info()
    print(queue_info)

    返回值:

    {
        '_class': 'hudson.model.Queue$WaitingItem',
        'actions': [
            {
                '_class': 'hudson.model.ParametersAction',
                'parameters': [
                    {
                        '_class': 'net.uaznia.lukanus.hudson.plugins.gitparameter.GitParameterValue',
                        'name': 'Branch',
                        'value': 'origin/develop'
                    },
                    {
                        '_class': 'hudson.model.StringParameterValue',
                        'name': 'ENV',
                        'value': 'debugenv'
                    }
                ]
            },
            {
                '_class': 'hudson.model.CauseAction',
                'causes': [
                    {
                        '_class': 'hudson.model.Cause$UserIdCause',
                        'shortDescription': '由用户admin启动',
                        'userId': 'admin',
                        'userName': 'admin'
                    }
                ]
            }
        ],
        'blocked': False,
        'buildable': False,
        'id': 3427,
        'inQueueSince': 1575772564711,
        'params': '
    Branch=origin/develop
    ENV=debugenv',
        'stuck': False,
        'task': {
            '_class': 'hudson.model.FreeStyleProject',
            'name': 'export_apk',
            'url': 'http: //10.2.1.92: 8080/jenkins/job/export_apk/',
            'color': 'aborted'
        },
        'url': 'queue/item/3427/',
        'why': '处于静默期。截止4.9秒',
        'timestamp': 1575772569711
    }

     关于如何获取jenkins token和user_id可参考前文:通过jenkins-Python在后台操作Jenkins构建job

  • 相关阅读:
    MapXtreme 2005学习(5):总结查找图元的三种方法
    MapXtreme 2005学习(1):创建临时图层
    MapXtreme 2005学习(2):向图层中添加点
    MapXtreme 2005学习(7):Web页面中实现鼠标中键缩放
    MapXtreme 2005学习(3):向图层中添加线段
    MapXtreme 2005学习(4):添加标注图层
    MapXtreme 2005学习(6):两种方法实现动态轨迹
    JavaScript使用技巧精萃
    C#注释语法
    MapXtreme 2005学习(8):实现手动画线
  • 原文地址:https://www.cnblogs.com/kaerxifa/p/12004631.html
Copyright © 2020-2023  润新知