Jenkins CI: Wie man Builds auf SVN Commit auslöst

Welche Plugins und Plugin-Funktionen muss ich einstellen, damit mein Jenkins-Job einen Build auslöst, wenn der Code für ein SVN-Projekt festgeschrieben wird?

Ich habe sowohl das Standard-SVN-Plugin als auch das SVN-Tagging-Plugin installiert, sehe jedoch keine neuen Funktionen, die eine Trigger-Konfiguration ermöglichen.

 highlycaffeinated04. Apr. 2012, 17:28

Antworten auf die Frage(4)

Fügen Sie das Post-Commit-Hook-Skript in das einhooks Ordner erstellen Sie einewget_folder in Ihrem Laufwerk C: \ und legen Sie diewget.exe Datei in diesem Ordner. Fügen Sie der aufgerufenen Datei den folgenden Code hinzupost-commit.bat

<code>SET REPOS=%1   
SET REV=%2

FOR /f "tokens=*" %%a IN (  
'svnlook uuid %REPOS%'  
) DO (  
SET UUID=%%a  
)  

FOR /f "tokens=*" %%b IN (  
'svnlook changed --revision %REV% %REPOS%'  
) DO (  
SET POST=%%b   
)

echo %REPOS% ----- 1>&2

echo %REV% -- 1>&2

echo %UUID% --1>&2

echo %POST% --1>&2

C:\wget_folder\wget ^   
    --header="Content-Type:text/plain" ^   
    --post-data="%POST%" ^   
    --output-document="-" ^   
    --timeout=2 ^     
    http://localhost:9090/job/Test/build/%UUID%/notifyCommit?rev=%REV%    
</code>

wo Test = Name des Jobs

echo wird verwendet, um den Wert zu sehen und Sie können auch hinzufügenexit 2 am Ende, um über das Problem Bescheid zu wissen und ob das Post-Commit-Hook-Skript ausgeführt wird oder nicht.

Dann gehen Sie einfach zu Jenkins → job_name →Build-Trigger Abschnitt → (i) Ferne Erstellung auslösen (d. h. aus Skripten) Authentifizierungstoken: Tokenname

Wechseln Sie in das Hook-Verzeichnis des SVN-Servers und geben Sie nach dem Auslösen die folgenden Befehle ein:

cp post-commit.tmpl post-commitchmod 777 post-commitchown -R www-data:www-data post-commit

vi post-commit

Hinweis: Alle Zeilen sollten kommentiert werdenFügen Sie zuletzt die folgende Zeile hinzu

Syntax (für Linux-Benutzer):

<code>/usr/bin/curl http://username:[email protected]:8081/job/job_name/build?token=Token_name
</code>

Syntax (für Windows Benutzer):

<code>C:/curl_for_win/curl http://username:[email protected]:8081/job/job_name/build?token=Token_name
</code>
 Peter Mortensen18. Juli 2018, 23:01
Diese Antwort ist mehr oder weniger identisch mitdiese Antwort.

mit dem ich einen Jenkins-Build auslöste. Grundsätzlich müssen Sie diese beiden Werte nach dem Festschreiben erfassen, wenn ein Festschreiben den SVN-Server erreicht:

<code>REPOS="$1"
REV="$2"
</code>

Dann verwenden Sie "svnlook dirs-changed $ 1 -r $ 2", um den Pfad abzurufen, der gerade festgeschrieben wurde. Anschließend können Sie überprüfen, welches Repository Sie erstellen möchten. Stellen Sie sich vor, Sie haben Hunderttausende von Projekten. Sie können nicht das gesamte Repository überprüfen, oder?

Sie können auscheckenmein Skript von GitHub.

Lösung für das Problem

Ich empfehle die erste Option aufgrund der einfachen Implementierung. Wechseln Sie zu dem zweiten, sobald Sie in Ihren Erstellungsprozessen ausgereift sind.

Rufen Sie das Repository ab, um festzustellen, ob Änderungen aufgetreten sind. Dies kann ein Commit "überspringen", wenn zwei Commits innerhalb desselben Abfrageintervalls eingehen.Wie das geht, erfahren Sie hierBeachten Sie den vierten Screenshot, in dem Sie einen "Build-Trigger" konfigurieren, der auf der Abfrage des Repositorys basiert (mit einer Crontab-ähnlichen Konfiguration).

Konfigurieren Sie Ihr Repository mit einem Post-Commit-Hook, der Jenkins benachrichtigt, dass ein Build gestartet werden muss.Wie das geht, erfahren Sie hier, im Abschnitt "Post-Commit-Hooks"

Die SVN-Tag-Funktion ist nicht Teil der Abfrage, sondern Teil des Heraufstufens des aktuellen "Heads" des Quellcodes zu einem Tag, um eine Momentaufnahme eines Builds zu erstellen. Dies ermöglicht es Ihnen, Jenkins buid # 32 als SVN-Tag / tags / build-32 (oder ähnliches) zu bezeichnen.

 Edwin Buck06. März 2019, 14:24
@mxdsp Der Link wurde aktualisiert. Es ist nicht so hübsch wie das alte Wandisco, aber es wird die Arbeit erledigen. Vielen Dank!
 EricMinick05. Apr. 2012, 17:22
Hooks Rock nach dem Festschreiben. Schnellere Antwortzeiten und (maßstabsgetreu) Ihr CI-System unterbindet das Quellrepo nicht mit Hunderten von Änderungsprotokollanforderungen.
 Edwin Buck05. Apr. 2012, 17:27
@EricMinick Sie sind großartig, aber manchmal können sie den CI-Server zum Schmelzen bringen, wenn Sie in kurzer Zeit viele kleine Commits erhalten. Es sind alles Pferde für Kurse, und es ist schwer zu wissen, welche Methode günstig ist, ohne zu analysieren, wie Ihr Entwicklungsprozess derzeit funktioniert.
 SandBag_199605. Jan. 2015, 21:04
@EdwinBuck: Wissen Sie, ob es eine Möglichkeit gibt, Jenkins so zu konfigurieren, dass nur selektive Commits erstellt werden? Ich werde erklären, ich habe eine tortoiseSVN und ein Jenkins-Projekt, das das Repository ständig abfragt. Wenn ich mir wünsche, dass mein Commit Jenkins nicht auslöst, gibt es dann eine Möglichkeit, das zu tun?
 Edwin Buck05. Jan. 2015, 23:23
@UnderDog Wenn Sie bis zu dem Punkt gereift sind, an dem Sie einen Post-Commit-Auslöser in maven haben, bevorzuge ich eine Lösung, die nach speziellen "Schlüsselwörtern" im Post-Commit-Auslöser sucht Server, um einen neuen Build zu starten. Beispielsweise kann "^ DONTBUILD -. *" Als Flag "Nicht erstellen" verwendet werden, wenn dies in der ersten Zeile des Commits angegeben ist.

Ihre Antwort auf die Frage