首页 > 解决方案 > 如何从经典 ASP 运行 Jenkins 作业?

问题描述

我已经搜索了所有内容,但找不到 VBscript 示例,并且我的所有尝试都失败了。我需要从经典的 ASP 网页 (VBScript) 运行 Jenkins 作业。我可以使用下面的代码提交作业,但它返回 403 crumb 错误。我需要做的是为这项工作提供用户/密码(我有),但我不知道如何在 VBScript 中为 Jenkins 设置身份验证。我知道碎屑错误是由 CSRF 引起的(我读了很多,但无法将其关闭),并希望身份验证能解决这个问题。任何帮助深表感谢。提前致谢。

Dim strJenkinsURL, HttpReq
strJenkinsURL = "http://<jenkinsmaster>/job/<myjob>/buildWithParameters?token=test&Description="& strDesc &"&TestEnv="& testEnv

Set HttpReq = Server.CreateObject("MSXML2.ServerXMLHTTP")
HttpReq.Open "POST", strJenkinsURL, False
HttpReq.Send
Response.Write "<br>Status: "& HttpReq.Status & vbNewline
Response.Write "<br>Response: "& HttpReq.responseText & vbNewline

编辑:根据评论,我尝试添加 Jenkins 登录信息,但我仍然收到来自 Jenkins 的 403 crumb 错误。我已经尝试寻找获取面包屑的解决方案,但没有找到任何 VBScript 示例。这是我现在正在尝试的代码和响应,但我不知道 setRequestHeaders 是否适用于 Jenkins,并且 Jenkins 文档没有任何帮助:

Dim strJenkinsURL
strJenkinsURL = "http://<jenkins master>/job/testjob/buildWithParameters?token=test&Description="& strDesc &"&TestEnv="& testEnv

Set HttpReq = Server.CreateObject("MSXML2.ServerXMLHTTP")
HttpReq.Open "POST", strJenkinsURL, False
HttpReq.setRequestHeader "UserName", "jenkinsuser"
HttpReq.setRequestHeader "Password", "userpassword"
HttpReq.setRequestHeader "Jenkins-Crumb", "<crumbvalue>"
HttpReq.Send
Response.Write "<br>Status: "& HttpReq.Status & vbNewline
Response.Write "<br>Response: "& HttpReq.responseText & vbNewline

状态:403 响应:HTTP 错误 403 访问 /job/testjob/buildWithParameters 时出现问题。原因:请求中没有包含有效的面包屑

标签: jenkinsvbscriptasp-classic

解决方案


对于 HTTP POST 请求,URL 指定资源,即strJenkinsURL = "http://<jenkinsmaster>/job/<myjob>/buildWithParameters

参数作为.Send命令的一部分添加:

Dim sParams
sParams = "token=test&Description=" & strDesc & "&TestEnv=" & testEnv
HttpReq.Send(sParams)

正如@Lankymart 指出的那样,您还需要设置适当的标题,例如

HttpReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
HttpReq.setRequestHeader("Content-Length", CStr(Len(sParams)))

推荐阅读