多くの類似のポストがあることを知っていますが、解決策が見つからず、他のポストに表示されているアドバイスと解決策は、 。ポスト・コミット・ポスト自動Jenkinsビルドをトリガーする
私は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
応答を取得してしまいますが、ジョブはキックオフことはありません、ということです。ここに私のポストコミットフックスクリプトです。何も起こりません。さて、ジェンキンスの仕事の構成を見てみましょう。多分私は設定や何かを見逃しています。ビルドトリガーセクションの下では、「トリガービルド(スクリプトなどからのリモート)」のオプションを確認しました。認証トークンも提供しています。私が何をしてきた。しかし、そのセクションの下方向が異なって見える:
使用、次のURLをリモートで構築トリガする:
JENKINS_URL/job/<job-name>/build?token=TOKEN_NAME
か/buildWithParameters?token=TOKEN_NAME
必要に応じて記録されたビルドに含まれるテキストを提供するために、&cause=Cause+Text
を追加します原因。
私は見ている指示のセットの間にデルタがあるようだし、そのギャップを埋める方法がわからない。 Jenkinsのジョブ設定ページの指示に従うのはかなり明らかです。ただし、UUIDではなくジョブ名を取得する方法がわかりません。
もう1つ注目すべきは、私のリポジトリ設定です。 CIサーバは多くのグループや部門で使用されているので、私はすべてスマートで、私の部署のプロジェクトだけを収容するトップレベルのリポジトリを作成すると思いました。リポジトリの構造は、ここに私の問題のために追加されますが、私はすべての変更がどこから来たどの特定のリポジトリを見つけることができるはずのように私は感じた場合、私は思ったんだけど
VisualSVN Server
-- Repositories
-- Project_A
-- Project_B
-- <my-department>
-- DepartmentProject_A
-- DepartmentProject_B
:だから、私のような設定に何かを持っています。それが本当であれば、スクリプトを調整してUUIDではなくジョブ名を使用してから、CIサーバーの設定ページに表示される明示的な指示に従うことができます。入力したrepos
変数を自分のvbsスクリプトに記録すると、プロジェクトの子リポジトリではなくトップレベルの部門リポジトリ(D:\<visual-svn-repos>\<my-department>\DepartmentProject_B
ではなくD:\<visual-svn-repos>\<my-department>
)を指しています。
ご協力いただければ幸いです。ありがとうございます。
最初のものは次のとおりです。i confにも必要ですscmをポーリングしてスケジュールを提供しないようにジョブをigureしてください。私はどのように私はその宣伝を見逃したかわからない、私は思ったよりも徹底的だったと思う。とにかく、ありがとう、scaytrase! – liltitus27