尝试使用 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 中触发构建吗

有没有办法从 Bamboo 触发 Jenkins 构建?

触发参数化远程作业,但控制台表示失败

使用 jenkins 在 Windows 远程环境 (VM) 上触发脚本

如何使用服务挂钩从VSTS触发内部部署jenkins作业