2017-04-07 2 views
2

Kürzlich habe ich begonnen, an CI-Projekt zu arbeiten, es muss das Projekt auf SCM-Commit (Git/SVN) bauen. Ich habe versucht, Build-Trigger remote zu verwenden, und es löst den Job aus, wenn ich den Code festlege und die Anwendung erfolgreich erstelle.Jenkins triggert einen Build basierend auf dem Commit in mehreren Projekten

Jetzt habe ich mehrere Projekte in einem einzigen Repository, also muss ich basierend auf meinem Commit das entsprechende Projekt im Repository finden und den spezifischen Job starten.

Gibt es eine Möglichkeit, dies in Jenkins zu tun?

-Code für post-commit-Hook-jenkins.vbs Datei

Set args = WScript.Arguments 
JobName = args.Item(0) 
Token = args.Item(1) 

' URL to open 
sUrl = "http://builduser:[email protected]:8080/buildByToken/build?job=" + JobName + "&token=" + Token 

' POST Request to send. 
WScript.Echo "sUrl: " + sUrl 
sRequest = "" 

HTTPPost sUrl, sRequest 

Function HTTPPost(sUrl, sRequest) 
    set oHTTP = CreateObject("Microsoft.XMLHTTP") 
    oHTTP.open "POST", sUrl,false 
    oHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 
    oHTTP.setRequestHeader "Content-Length", Len(sRequest) 
    oHTTP.send sRequest 
    HTTPPost = oHTTP.responseText 
End Function 

-Code für Post-commit.bat Datei

SET CSCRIPT=%windir%\system32\cscript.exe 
SET VBSCRIPT=E:\Repositories\CICD\hooks\post-commit-hook-jenkins.vbs 

"%CSCRIPT%" "%VBSCRIPT%" "JobName" "AuthenticationToken" 

Antwort

2

Wenn Sie

  • Richten Sie den SVN/git-Speicherort des Projekts unter dem Quellcode Ma ein nagment“der Job-Konfiguration
  • und wählen Sie dann‚Poll SCM‘in der‚Trigger Build-Abschnitt‘

dann sollte es ziemlich viel arbeiten, wie Sie wollen.

Die Tatsache, dass Sie diese Frage stellen, bedeutet wahrscheinlich, dass Sie den Quellcode Checkout aus dem Build-Skript tun, richtig? Vermeiden Sie dies und lassen Sie Jenkins den svn checkout/git-Klon handhaben.

Oder vielleicht versuchen Sie nur, das Polling zu vermeiden, und diese Frage bezieht sich darauf, wie Sie verschiedene Projekte vom SVN-Post-Commit-Hook auslösen, abhängig davon, wo Sie in einem SVN-Repository festgeschrieben haben? In diesem Fall müssen Sie ein ausgefeilteres Hook-Skript schreiben, das die Pfade analysiert, die von dem Commit betroffen sind, und die darauf basierenden korrekten Jenkins-Jobs auslöst.

bearbeiten: anstelle des Jobnamen

In Ihrem Post commit.bat Datei, sollten Sie auf das Repository und Revisionsnummer des Passes begehen, wie Sie noch nicht wissen, welche Job-Trigger . Subversion übergibt das Repository und die Revision als erstes und zweites Argument.

SET CSCRIPT=%windir%\system32\cscript.exe 
SET VBSCRIPT=E:\Repositories\CICD\hooks\post-commit-hook-jenkins.vbs 
SET REPOS=%1 
SET REVISION=%2 

"%CSCRIPT%" "%VBSCRIPT%" %REPOS% %REVISION% "AuthenticationToken" 

In Ihrem Skript vbs, sollten Sie dann die Anweisung ersetzen, wo das Argument von jobname von

repos = args.Item(0) 
revision = args.Item(1) 
token = args.Item(2) 

Jetzt genommen müssen Sie diese Versionsnummer verwenden, um die Änderungen mit svnlook zu inspizieren. exe. Setzen Sie den absoluten Pfad in der svnlook Variable svnlook.exe und führen Sie so etwas wie dieses:

Set changedExec = shell.Exec(svnlook & " changed --revision " & revision & " " & repos) 
Do Until changedExec.StdOut.AtEndOfStream 
    changed = changed + changedExec.StdOut.ReadLine() + Chr(10) 
Loop 

Jetzt haben Sie die Ausgabe von svnlook.exe changed in der changed variabel. Es teilt Ihnen mit, welche Dateien im SVN-Repository vom Commit betroffen waren.

Als nächstes müssen Sie den Inhalt der Variablen changed analysieren, um den auszuführenden Jobnamen zu bestimmen.Zum Beispiel könnten Sie etwas Einfaches tun, z. B. prüfen, ob es "foo/trunk /" enthält, und dann den foo-trunk-Job auslösen.

+0

@SivamohanReddy: Gleich nachdem ich meine Antwort gepostet habe, habe ich angefangen zu denken, dass ich die Frage vielleicht falsch verstanden habe, also habe ich einen weiteren Absatz hinzugefügt. –

+0

Vielen Dank für Ihre Antwort @Wim Coenen, haben wir irgendeine Probe solche Art von Haken Skripte auszulösen? und darüber hinaus habe ich alle Projekte in einem einzigen Repo –

+0

In Ihrer Frage scheinen Sie zu implizieren, dass Sie bereits ein Skript an Ort und Stelle haben, die den Jenkins-Build auslöst, wenn ein Commit passiert. Es wäre am besten, das Skript der Frage hinzuzufügen, damit wir wissen, was Sie bereits haben, und dann können wir sehen, wie Sie es ändern können. –

Verwandte Themen