首页 > 编程语言 > 详细

[Python]python-jenkins 启动需要参数的job

时间:2019-12-08 13:16:20      阅读:293      评论:0      收藏:0      [点我收藏+]

需求:

我要用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])
{utask: {uurl: uhttp://your_url/job/my_job/, ucolor: uaborted_anime, uname: umy_job}, ustuck: False, uactions: [{ucauses: [{ushortDescription: uStarted by timer}]}], ubuildable: False, uparams: u‘‘, ubuildableStartMilliseconds: 1315087293316, uwhy: uBuild #2,532 is already in progress (ETA:10 min), ublocked: 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

 

[Python]python-jenkins 启动需要参数的job

原文:https://www.cnblogs.com/kaerxifa/p/12004631.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!