如何使用标准 Python 库通过文件参数触发经过身份验证的 Jenkins 作业
目前,我们正在 PycURL 的帮助下从 Python 脚本触发 Jenkins 作业。然而,我们希望摆脱 PycURL 依赖,但迄今为止收效甚微。让我们的场景变得更加复杂的是我们需要发布一个文件作为参数。我们当前用于发布请求的 PycURL 逻辑如下所示:
url = "https://myjenkins/job/myjob/build"
with contextlib.closing(pycurl.Curl()) as curl:
curl.setopt(pycurl.URL, url)
curl.setopt(pycurl.USERPWD, "myuser:mypassword")
curl.setopt(pycurl.SSL_VERIFYPEER, False)
curl.setopt(pycurl.SSL_VERIFYHOST, False)
curl.setopt(pycurl.FAILONERROR, True)
data = [
("name", "integration.xml"),
("file0", (pycurl.FORM_FILE, "integration.xml")),
("json", "{'parameter': [{'name': 'integration.xml', 'file': 'file0'}]}"),
("Submit", "Build"),
]
curl.setopt(pycurl.HTTPPOST, data)
try:
curl.perform()
except pycurl.error, err:
raise JenkinsTriggerError(curl.errstr())
我们如何用标准 Python 库中的功能来替换它?
我们之前尝试过,但不得不放弃,因为我们看不到如何成功上传文件,正如您可以从 我关于这个问题的问题。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
我们只能借助 requests 库来做到这一点。
如果需要,可以使用 Jekins-Crumb 获取:
We can do it with the help of requests library only.
Jekins-Crumb if required can be obtained using:
我找到了一个解决方案,使用 requests 和 urllib3 库。不完全标准,但比 PycURL 依赖项更轻量。应该可以直接使用请求来执行此操作(避免 urllib3 部分),但我遇到了一个错误。
I found a solution, using the requests and urllib3 libraries. Not entirely standard, but more lightweight than the PycURL dependency. It should be possible to do this directly with requests (avoiding the urllib3 part), but I ran into a bug.
如果您熟悉 python,那么您可以使用官方网站提供的 jenkins REST APT python 包装器。 查看此链接。
使用这个 python 包装器触发构建非常容易。这是我的示例:
对于那些不知道在哪里可以找到令牌的人,以下是方法:
享受它。
If you are familiar with python, then you can use the jenkins REST APT python wrapper provided by the official site. see this link.
Trigger a build is unbelievably easy by using this python wrapper. Here is my example:
For those who don't know where to find the token, here is how:
Enjoy it.
可能看起来像这样:
抱歉,我没有安装 Jenkins 来测试它。
Probably it can look something like this:
Sorry, I don't have installed Jenkins around to test it out.
(2024.01) 让我在经过一天的尝试和错误之后提供迄今为止最好的解决方案。
注意必须声明文件关闭,参考:https://stackoverflow.com/a/52396494/8013269
(2024.01) Let me provide the best solution so far after my eniter day of try and error.
Note that file close must be stated, refer to: https://stackoverflow.com/a/52396494/8013269
这是与 aknuds1 答案类似的版本,其中
test_result
是 xml 字符串:猜测一下,附加参数将作为 json 字符串数组或附加文件等的一部分传入。如果有,请告诉我情况确实如此,如果我发现的话,我会更新这个答案。该解决方案可以很好地触发 JUnit 测试。
版本:
Here is a similar version to aknuds1 answer where
test_result
is the xml string:Taking a guess, additional parameters would be passed in as part of the json string array, or additional files, etc. Let me know if this is the case, also, if I find out, i'll update this answer. This solution worked nicely to trigger JUnit tests.
Version:
我使用的另一个替代方案:
有关更多详细信息,您可以参考:提出请求
Another Alternative that I used :
For more details you can refer :Make a Request