Я знаю, что есть много подобных сообщений, но я не нашел решения, и рекомендации и решения, представленные в других сообщениях, не совсем смущают то, что я вижу ,Post-Commit Крюк для запуска автоматической Jenkins Build
Сценарий довольно прост: у меня есть проект в Eclipse, и когда я регистрирую изменения с этого проекта на нашем сервере Subversion (например, VisualSVN Server 2.5.3), я хочу, чтобы наш непрерывный сервер интеграции Jenkins (т.е. Jenkins 1.546), чтобы поднять это изменение и начать новую сборку. Я не хочу опросить Дженкинса.
Я в основном выполнял шаги в this article. Вот мой пост фиксации крюка сценарий:
repos = WScript.Arguments.Item(0)
rev = WScript.Arguments.Item(1)
svnlook = WScript.Arguments.Item(2)
jenkins = WScript.Arguments.Item(3)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.CreateTextFile("C:\Program Files (x86)\VisualSVN Server\log.txt")
objFile.Writeline "repos=" & repos
objFile.Writeline "rev=" & rev
objFile.Writeline "svnlook=" & svnlook
objFile.Writeline "jenkins=" & jenkins
Set shell = WScript.CreateObject("WScript.Shell")
Set uuidExec = shell.Exec(svnlook & " uuid " & repos)
Do Until uuidExec.StdOut.AtEndOfStream
uuid = uuidExec.StdOut.ReadLine()
Loop
objFile.Writeline "uuid=" & uuid
Set changedExec = shell.Exec(svnlook & " changed --revision " & rev & " " & repos)
Do Until changedExec.StdOut.AtEndOfStream
changed = changed + changedExec.StdOut.ReadLine() + Chr(10)
Loop
objFile.Writeline "changed=" & changed
url = jenkins + "crumbIssuer/api/xml?xpath=concat(//crumbRequestField,"":"",//crumb)"
Set http = CreateObject("Microsoft.XMLHTTP")
http.open "GET", url, False
http.setRequestHeader "Content-Type", "text/plain;charset=UTF-8"
http.send
crumb = null
objFile.Writeline "rev url=" & url
objFile.Writeline "http.status=" & http.status
objFile.Writeline "http.responseText=" & http.responseText
if http.status = 200 then
crumb = split(http.responseText,":")
end if
url = jenkins + "subversion/" + uuid + "/notifyCommit?rev=" + rev + "&token=pinkfloyd65"
objFile.Writeline "url=" & url
if not isnull(crumb) then
objFile.Writeline "crumb(0)=" & crumb(0)
objFile.Writeline "crumb(1)=" & crumb(1)
end if
if isnull(crumb) then
objFile.Writeline "crumb=null"
end if
Set http = CreateObject("Microsoft.XMLHTTP")
http.open "POST", url, False
http.setRequestHeader "Content-Type", "text/plain;charset=UTF-8"
if not isnull(crumb) then
http.setRequestHeader crumb(0),crumb(1)
http.send changed
if http.status <> 200 then
objFile.Writeline "Error. HTTP Status: " & http.status & ". Body: " & http.responseText
end if
if http.status = 200 then
objFile.Writeline "HTTP Status: " & http.status & ".\n Body: " & http.responseText
end if
end if
Вопрос заключается в том, что, хотя выше команда POST
заканчивает получение 200
ответа назад, работа никогда не пинает. Ничего не происходит. Хорошо, давайте проверим настройку работы Jenkins; может быть, мне не хватает настройки или чего-то еще. Ну, в разделе Build Triggers я проверил вариант «Триггерные сборки удаленно (например, из скриптов)», и я также предоставил токен аутентификации. Но, направление под этим раздел отличаться от того, что я делал:
Используйте следующий URL для запуска построить удаленно:
JENKINS_URL/job/<job-name>/build?token=TOKEN_NAME
или/buildWithParameters?token=TOKEN_NAME
Необязательно добавлять&cause=Cause+Text
предоставить текст, который будет включен в записанных сборках причина.
Итак, похоже, что между наборами инструкций, которые я вижу, есть дельта, и я не уверен, как свести этот пробел. Кажется довольно очевидным следовать инструкциям на странице конфигурации задания Jenkins, за исключением того, что я не знаю, как получить имя задания, а не UUID.
Еще одна вещь, которую следует отметить, - это настройка моего хранилища. Поскольку CI-сервер используется многими группами и отделами, я думал, что буду всем умным и создаю репозиторий верхнего уровня для размещения проектов моего отдела. Итак, у меня есть что-то вроде настройки:
VisualSVN Server
-- Repositories
-- Project_A
-- Project_B
-- <my-department>
-- DepartmentProject_A
-- DepartmentProject_B
Я интересно, если структура хранилища является добавлением к моим проблемам, но я чувствую, что я должен быть в состоянии выяснить, какие конкретные хранилища любых изменений пришли. Если бы это было так, то я мог бы настроить мой сценарий на использование имени задания, а не на UUID, а затем следовать явным инструкциям, отображаемым на странице конфигурации моего сервера CI. Когда я регистрирую входящую переменную repos
в моем сценарии vbs, она указывает на репозиторий отдела верхнего уровня, а не на дочерний репозиторий проекта (т. Е. D:\<visual-svn-repos>\<my-department>
, а не D:\<visual-svn-repos>\<my-department>\DepartmentProject_B
).
Любая помощь будет принята с благодарностью, спасибо, ребята.
Первым был: мне нужно было также conf настроить задание на опрос scm, не предусматривая расписания. Я не уверен, как я пропустил эту рекламу, я думаю, я был менее тщательным, чем я думал. в любом случае, спасибо, scaytrase! – liltitus27