持续集成 Python-Jenkins API 使用 —— 在后端代码中操控 Jenkins

Nisir · 2017年03月11日 · 最后由 cooling 回复于 2018年01月22日 · 1002 次阅读

最近在工作中需要用到在后台代码中触发 Jenkins 任务的构建,于是想到 Jenkins 是否有一些已经封装好的 API 类库提供,用于处理跟 Jenkins 相关的操作。下面就简单介绍下我的发现。

Linux Curl

首先找到的是 Jenkins 官网的 wiki:https://wiki.jenkins-ci.org/display/JENKINS/Remote+access+API

在官网首页就有关于触发 job 的方法:

Linux Curl调用Jenkins Api

个人尝试了下,该方式是通过命令行直接调 curl 去发 POST 请求的方式来触发 job 的构建。对于用 openid 管理的 Jenkins,需要带上参数--user USER:PASSWORD,其中的 USER 和 PASSWORD 不是你的 openID 登录的账号密码,而是登录后显示在 Jenkins 中的 User Id 和 API Token,它们的的查看方式如下:

用 openID 登录 jenkins —> 点击右上角的用户名,进入用户个人页面 —> 点击左边的设置,打开设置页面 —> API Token,Show Api Token...

如果需要参数化构建 job,则要加上--data-urlencode json='{"parameter": [{"name":"param_name1","value":"param_value1"}, {"name":"param_name2","value":"param_value2"}]}'

显然,这种方式比较繁琐,很容易出现因格式不正确导致触发任务失败,而且这种方式不能帮助我们获取更多的关于 job 的信息以便于我们后续对 job 的状态进行跟踪。

Python-Jenkins

继续寻找,然后我在 Jenkins 官网上找到了 Python-Jenkins API,仔细阅读后发现,它几乎涵盖了大部分 Jenkins 的操作,大大方便了我们在后台进行对 Jenkins 的一些列操作。

Python-Jenkins 官网: https://pypi.python.org/pypi/python-jenkins/

Python-Jenkins Doc:http://python-jenkins.readthedocs.io/en/latest/index.html

下面简单介绍下如何使用 Python-Jenkins:

  • 安装

sudo pip install python-jenkins

  • 使用 python-jenkins api
import jenkins

#定义远程的jenkins master server的url,以及port

jenkins_server_url='xxxx:xxxx'

#定义用户的User Id 和 API Token,获取方式同上文

user_id='xxxx'

api_token='xxxx'

#实例化jenkins对象,连接远程的jenkins master server

server=jenkins.Jenkins(jenkins_server_url, username=user_id, password=api_token)

#构建job名为job_name的job(不带构建参数)

server.build_job(job_name)

#String参数化构建job名为job_name的job, 参数param_dict为字典形式,如:param_dict= {"param1":“value1”, “param2”:“value2”} 

server.build_job(job_name, parameters=param_dict)

#获取job名为job_name的job的相关信息

server.get_job_info(job_name)

#获取job名为job_name的job的最后次构建号

server.get_job_info(job_name)['lastBuild']['number']

#获取job名为job_name的job的某次构建的执行结果状态

server.get_build_info(job_name,build_number)['result']     

#判断job名为job_name的job的某次构建是否还在构建中

server.get_build_info(job_name,build_number)['building']
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 7 条回复 时间 点赞
1楼 已删除

hi, 楼主。我调 python-jenkins 的 build_job 方法,报 “Error in request. Possibly authentication failed [500]: Server Error” 请问你有遇到过吗?

what_what 回复

500 一般是服务器问题吧。你确认你的 jenkins host 是连通的么,telnet 下 8282 端口试试看。如果端口 telnet 是通的,看看是不是用户名或密码有问题,对于 openid 认证的 jenkins 服务器则要使用 token,token 获取方式我文章里有写。如果还是有问题,可 email 我私聊。zni.feng@gmail.com

kanchi240 回复

很赞!

您好,楼主,我用的 python-jenkins 插件,在进行获取 job 或者构建信息,以及 build_job、copy_job 都是可以的,但是在进行 create_job 和 reconfig_job 就会报 Error in request. Possibly authentication failed [500]: Server Error” ,而我用的帐号和 token 已知是最高权限的用户了。请问楼主有遇到这个问题吗?

JackBai233 回复

抱歉,今天才看到你的留言,之前被我疏忽了。500 一般是服务器错误,按照你的说法,其他 api 都尝试通了,那就排除是服务器连通性问题了,猜想很可能是参数传错了。而且错误提示了出现了 authentication failed,像是权限问题,但是你说了账号和 token 是最高权限用户了,我猜测下你是不是漏了一个权限的地方:jenkins job 配置中有一块是安全配置的,你把自己的账户添加上去,然后赋上所有权限,再尝试一下。

楼主,请问这个怎么解决:

---------请问 Jenkins 的
该怎么设置。当前 Jenkins 版本 2.89.3

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册