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

时间:2016-03-10 09:38:46

标签: python jenkins

我设置了一个名为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", 1, "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'

2 个答案:

答案 0 :(得分:4)

我不清楚为什么你的例子不起作用,但我发现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)

在我看来,当通过 requests 包访问普通的Jenkins REST API时,使用容易混淆的文档界面包(为什么有多种方法可以获得构建?)几乎没有什么好处?正如massiou's answer所述。

答案 1 :(得分:3)

您可以触发您的工作,而不是使用jenkinsapi模块,只需按照以下方式请求jenkins REST api:

import requests 

# Case job has no parameter
job_url = "http://localhost:8080/job/test2/build"

# Job with parameters
job_url = "http://localhost:8080/job/test2/buildWithParameters?param1=value1&param2=value2"

status = requests.get(job_url)
相关问题