[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': '\nBranch=origin/develop\nENV=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

posted @ 2019-12-08 10:15  wangju003  阅读(3925)  评论(0编辑  收藏  举报