尝试使用 wget 触发远程 Jenkins 作业时出现 405 错误
Posted
技术标签:
【中文标题】尝试使用 wget 触发远程 Jenkins 作业时出现 405 错误【英文标题】:405 Error when attempting to trigger remote Jenkins job with wget 【发布时间】:2016-06-30 02:15:53 【问题描述】:我有一个远程 Jenkins 工作,不需要任何登录即可开始。这是一个参数化作业,因此通常以“使用参数构建”开始。
当尝试触发此构建(使用默认参数)时,我调用以下命令:
wget [url_to_job]/build
我得到这个错误:
Connecting to 10.57.112.238:8080... connected.
HTTP request sent, awaiting response... 405 Method Not Allowed
2016-03-14 11:49:34 ERROR 405: Method Not Allowed.
根据我的阅读,我认为这应该可行。
我做错了吗?
【问题讨论】:
对于参数化作业,使用 /buildWithParameters。相关:***.com/a/18823307/172599 【参考方案1】:您最好使用 curl 而不是 wget 并为命令提供凭据:
curl -XPOST --silent --show-error --user <user>:<key> <url_to_job>/build
【讨论】:
OP 说不需要登录。为什么 curl 会比 wget 更好? POST 确实是问题【参考方案2】:-
首先,远程触发器的 URL 应该是 wget [url_to_job]/buildWithParameters 而不是 [url_to_job]/build。
您可以使用 wget [url_to_job]/buildWithParameters/?parameterName=parameterValue 传递参数
例如:http://localhost:8080/jenkins/job/test/buildWithParameters/?name=arun
【讨论】:
请记住参数化作业的 /buildWithParameters【参考方案3】:wget --auth-no-challenge --delete-after --verbose "http://10.157.163.249:8080/job/scanning/buildWithParameters?token=scan&buildURL='abcdefg'"
【讨论】:
虽然此代码可能会解决问题,including an explanation 关于如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的回答添加解释并说明适用的限制和假设。【参考方案4】:问题很可能是您没有将令牌复制到构建触发器的“身份验证令牌”字段中。单击复选框是不够的 - 除非提供令牌,否则 Jenkins 将默默地删除复选框。
一旦我这样做了,下面的命令就起作用了:
wget --auth-no-challenge --user STRING --password STRING --output-document - 'http://localhost:8080/job/PROJECT/build?token=TOKEN'
当然,将密码放入脚本或命令行历史记录是不好的做法。请参阅this post 了解如何将凭据存储在 ~/.netrc 中。
【讨论】:
以上是关于尝试使用 wget 触发远程 Jenkins 作业时出现 405 错误的主要内容,如果未能解决你的问题,请参考以下文章
将扩展选择参数值从一个作业传递到 Jenkins 管道中的另一个远程作业
可以阻止 GitLab Webhook 在 Jenkins 中触发构建吗