Как запустить работу Дженкинса из классического ASP? - PullRequest
0 голосов
/ 28 июня 2019

Я искал все, но не могу найти примеры VBscript, и все мои попытки потерпели неудачу. Мне нужно запустить задание Jenkins с классической веб-страницы ASP (VBScript). Я могу отправить работу с кодом ниже, но он возвращает ошибку 403 крошки. Что мне нужно сделать, это предоставить имя пользователя / пароль (который у меня есть) для этой работы, но я не знаю, как настроить аутентификацию для Jenkins в VBScript. Я знаю, что ошибка крошки происходит из-за 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

EDIT: Основываясь на комментариях, я попытался добавить регистрационную информацию Jenkins, но я все еще получаю ошибку 403 крошки от Jenkins. Я пытался найти решение для получения мякиша, но не нашел примеров 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. Причина: в запрос не была включена действительная крошка

Ответы [ 2 ]

0 голосов
/ 11 июля 2019

После объединения многих предложений с некоторыми пробами и ошибками я наконец-то смог заставить задание Jenkins работать удаленно с помощью приведенного ниже кода VBScript (с переменными, для которых установлены правильные значения, такие как strCrumb). Возвращенный статус будет 201 для успеха. Функции Base64 были взяты из Строка кодирования Base64 в VBScript

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 голосов
/ 02 июля 2019

Для запроса 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)))
...