首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从经典的ASP运行Jenkins作业?

如何从经典的ASP运行Jenkins作业?
EN

Stack Overflow用户
提问于 2019-06-28 23:30:34
回答 2查看 344关注 0票数 0

我找遍了所有的地方,但是没有找到VBscript的例子,我所有的尝试都失败了。我需要从一个经典的ASP网页(VBScript)运行一个Jenkins作业。我可以使用下面的代码提交作业,但它返回一个403 crumb错误。我需要做的是提供此工作的用户/密码(我有),但我不知道如何在VBScript中为Jenkins设置身份验证。我知道crumb错误是由于CSRF造成的(我读了那么多,但无法关闭它),并希望身份验证能解决这个问题。任何帮助都是非常感谢的。提前谢谢。

代码语言:javascript
复制
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文档也没有任何帮助:

代码语言:javascript
复制
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响应:访问/job/testjob/buildWithParameters时出现HTTP错误403问题。原因:请求中没有包含有效的crumb

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-11 21:36:55

在经过反复试验拼凑出许多建议之后,我终于能够使用下面的VBScript代码(将变量设置为适当的值,如strCrumb)远程运行Jenkins作业。如果成功,则返回状态为201。Base64函数取自Base64 Encode String in VBScript

代码语言:javascript
复制
Dim strJenkinsURL, strParam1, strParam2, strCrumb, strUsername, strPassword
strJenkinsURL = "https://<jenkinsURL>/job/testjob/buildWithParameters?token=test&param1="& strParam1 &"&param2="& strParam2

Set HttpReq = Server.CreateObject("MSXML2.ServerXMLHTTP")
HttpReq.Open "POST", strJenkinsURL, False
HttpReq.setOption 2, 13056
HttpReq.setRequestHeader "Jenkins-Crumb", strCrumb
HttpReq.setRequestHeader "Authorization", "Basic "& Base64Encode(strUsername &":"& strPassword)
HttpReq.Send
Response.Write "<br>Status: "& HttpReq.Status & vbNewline
Response.Write "<br>Response: "& HttpReq.responseText & vbNewline

Function Base64Encode(sText)
    Dim oXML, oNode
    Set oXML = CreateObject("Msxml2.DOMDocument.3.0")
    Set oNode = oXML.CreateElement("base64")
    oNode.dataType = "bin.base64"
    oNode.nodeTypedValue = Stream_StringToBinary(sText)
    Base64Encode = oNode.text
    Set oNode = Nothing
    Set oXML = Nothing
End Function

Private Function Stream_StringToBinary(Text)
    Const adTypeText = 2
    Const adTypeBinary = 1
    Dim BinaryStream 'As New Stream
    Set BinaryStream = CreateObject("ADODB.Stream")
    BinaryStream.Type = adTypeText
    BinaryStream.CharSet = "us-ascii"
    BinaryStream.Open
    BinaryStream.WriteText Text
    BinaryStream.Position = 0
    BinaryStream.Type = adTypeBinary
    BinaryStream.Position = 0
    Stream_StringToBinary = BinaryStream.Read
    Set BinaryStream = Nothing
End Function
票数 0
EN

Stack Overflow用户

发布于 2019-07-02 18:24:00

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

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

代码语言:javascript
复制
Dim sParams
sParams = "token=test&Description=" & strDesc & "&TestEnv=" & testEnv
HttpReq.Send(sParams)

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

代码语言:javascript
复制
HttpReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
HttpReq.setRequestHeader("Content-Length", CStr(Len(sParams)))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56809599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档