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

如何使用Python包JenkinsAPI触发Jenkins构建?,python,jenkins,Python,Jenkins,我有一个名为Test2的Jenkins作业,我可以从Jenkins web界面构建它。现在我想使用JenkinsAPI触发这个构建。我只能找到做其他事情的示例代码,但其中提到了Build类。所以我想我会尝试实例化它,然后等待它完成(希望这也会触发实际的构建),但我得到的错误比这要早得多。我做错了什么 import jenkinsapi b = jenkinsapi.build.Build("http://localhost:8080", 1, "test2") b.block_until_com

我有一个名为
Test2
的Jenkins作业,我可以从Jenkins web界面构建它。现在我想使用JenkinsAPI触发这个构建。我只能找到做其他事情的示例代码,但其中提到了
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'
回溯(最近一次呼叫最后一次):
文件“/Users/jonathan/Genetta/Eclipse\u Django\u workspace/FOO/FOO/TriggerBuild.py”,第2行,在
b=jenkinsapi.build.build(“http://localhost:8080“,1,“测试2”)
文件“/Users/jonathan/anaconda/lib/python2.7/site packages/jenkinsapi/build.py”,第58行,在__
JenkinsBase.\uuuu init\uuuu(self,url)
文件“/Users/jonathan/anaconda/lib/python2.7/site packages/jenkinsapi/jenkinsbase.py”,第35行,在__
self.poll()
文件“/Users/jonathan/anaconda/lib/python2.7/site packages/jenkinsapi/jenkinsbase.py”,第59行,投票
数据=self.\u轮询(树=tree)
文件“/Users/jonathan/anaconda/lib/python2.7/site packages/jenkinsapi/build.py”,第65行,在
返回self.get_数据(url,参数={'depth':self.depth},tree=tree)
get_数据中的第72行文件“/Users/jonathan/anaconda/lib/python2.7/site packages/jenkinsapi/jenkinsbase.py”
requester=self.get_jenkins_obj().requester
文件“/Users/jonathan/anaconda/lib/python2.7/site packages/jenkinsapi/build.py”,第371行,在get_jenkins_obj中
返回self.job.get_jenkins_obj()
AttributeError:'str'对象没有属性'get\u jenkins\u obj'

不使用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)

我不清楚为什么您的示例不起作用,但我发现JenkinsAPI文档总体上令人困惑,所以可能我不明白

我发现,要直接获得特定的构建,可以在api包中使用。参数的顺序不同:

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)

在我看来,当普通的Jenkins REST API可以通过所描述的请求包访问时,使用文档混乱的接口包(为什么有多种方法获得构建?)没有什么好处

您必须使用POST方法来触发buildsThanks以获取您的答案。我在网上找到了触发构建的不同方法(有些有效,有些无效)。你的帮助很大。好奇你在哪里找到的?官方的python jenkinsapi文档并不十分详尽。你在哪里找到的?