加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

如何使用Python包JenkinsAPI触发Jenkins构建?

发布时间:2020-12-20 11:50:19 所属栏目:Python 来源:网络整理
导读:我有一个名为Test2的Jenkins作业,我可以使用Jenkins web界面构建它.现在我想使用JenkinsAPI触发该构建.我只能找到示例代码来做其他事情,但 API Documentation提到了Build类.所以我想我会尝试实例化它然后等待它完成(希望这也会触发实际的构建)但是我比这更早
我有一个名为Test2的Jenkins作业,我可以使用Jenkins web界面构建它.现在我想使用JenkinsAPI触发该构建.我只能找到示例代码来做其他事情,但 API Documentation提到了Build类.所以我想我会尝试实例化它然后等待它完成(希望这也会触发实际的构建)但是我比这更早得到了相当神秘的错误.我究竟做错了什么?

import jenkinsapi
b = jenkinsapi.build.Build("http://localhost:8080",1,"test2")
b.block_until_complete()

给我:

Traceback (most recent call last):
  File "/Users/jonathan/Genetta/Eclipse_Django_workspace/FOO/foo/TriggerBuild.py",line 2,in <module>
    b = jenkinsapi.build.Build("http://localhost:8080","test2")
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/jenkinsapi/build.py",line 58,in __init__
    JenkinsBase.__init__(self,url)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/jenkinsapi/jenkinsbase.py",line 35,in __init__
    self.poll()
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/jenkinsapi/jenkinsbase.py",line 59,in poll
    data = self._poll(tree=tree)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/jenkinsapi/build.py",line 65,in _poll
    return self.get_data(url,params={'depth': self.depth},tree=tree)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/jenkinsapi/jenkinsbase.py",line 72,in get_data
    requester = self.get_jenkins_obj().requester
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/jenkinsapi/build.py",line 371,in get_jenkins_obj
    return self.job.get_jenkins_obj()
AttributeError: 'str' object has no attribute 'get_jenkins_obj'

解决方法

我不清楚为什么你的例子不起作用,但我发现JenkinsAPI文档总体上令人困惑,所以也许我只是不明白.

我发现要直接获得特定版本,您可以在api包中使用get_build method.参数的顺序不同:

import jenkinsapi
b = jenkinsapi.api.get_build("http://localhost:8080","Test 1",1)

这对于现有的构建来说很好,通过其他方式启动.但听起来你真的想触发一个构建.在这种情况下,通过Jenkins实例获取作业并使用invoke方法:

import jenkinsapi
jenkins = jenkinsapi.jenkins.Jenkins("http://192.168.99.100:8080")
job = jenkins["Test 1"]
job.invoke(block=True)

在我看来,如果可以通过massiou’s answer所描述的请求包访问普通的Jenkins REST API,那么使用容易混淆的文档接口包(为什么有多种方法可以获得构建?)几乎没有什么好处.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读