2012-04-04 7 views
64

Welche Plugins und Plugin-Funktionen muss ich einstellen, um meinen Jenkins-Job dazu zu bringen, einen Build zu erstellen, wann immer Code für ein SVN-Projekt verwendet wird? Ich habe sowohl das Standard-SVN-Plugin als auch das SVN-Tagging-Plugin installiert, sehe aber keine neuen Features, die eine Trigger-Konfiguration erlauben.Jenkins CI: Wie Builds auf SVN-Commit ausgelöst werden

+0

mögliche Duplikat [Trigger Hudson bauen, wenn Svn commit] (http : //stackoverflow.com/questions/4792466/trigger-hudson-build-when-svn-commit) – highlycaffeinated

Antwort

71

Es gibt zwei Möglichkeiten, um dies zu realisieren: zunächst aufgrund seiner einfachen Implementierung

ich die erste Option zu empfehlen. Sobald Sie in Ihren Build-Prozessen gereift sind, wechseln Sie zu der zweiten.

  1. Überprüfen Sie das Repository, um festzustellen, ob Änderungen aufgetreten sind. Dies könnte einen Commit "überspringen", wenn zwei Commits innerhalb desselben Abfrageintervalls eingehen. Description of how to do so here, notieren Sie sich den vierten Screenshot, bei dem Sie in dem Job einen "Build-Trigger" basierend auf dem Polling des Repositorys konfigurieren (mit einer Crontab-ähnlichen Konfiguration).

  2. Konfigurieren Sie Ihr Repository für einen Post-Commit-Hook, der Jenkins benachrichtigt, dass ein Build gestartet werden muss. Description of how to do so here, im Abschnitt „post-commit Haken“

Die SVN Tag-Funktion ist nicht Teil der Abfrage ist, ist es Teil des aktuellen „Kopf“ des Quellcodes zu einem Tag zu fördern, eine Momentaufnahme bauen. Auf diese Weise können Sie sich auf Jenkins # 32 als SVN-Tag/tags/build-32 (oder etwas Ähnliches) beziehen.

+0

post-commit hooks rock. Schnellere Antwortzeiten und (im Maßstab) reduzieren das CI-System den Quell-Repo nicht mit Hunderten von Änderungsprotokollanforderungen. – EricMinick

+4

@EricMinick Sie sind großartig, aber manchmal können sie den CI-Server schmelzen, wenn Sie in kurzer Zeit viele kleine Commits erhalten. Es sind alle Pferde für Kurse, und es ist schwer zu wissen, welche Methode günstig ist, ohne zu analysieren, wie Ihr Entwicklungsprozess derzeit funktioniert. –

+0

@EdwinBuck: Weißt du, 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 abfragt. Wenn ich jetzt wünsche, dass das Commit, das ich mache, Jenkins nicht auslösen sollte, gibt es einen Weg, das zu tun? –

0

Ich habe ein Tool mit Python mit einigen Bash, um einen Jenkins Build auslösen ausgelöst. Grundsätzlich müssen Sie diese zwei Werte von sammeln post-commit, wenn ein Treffer commit SVN-Server:

REPOS = "$ 1" REV = "$ 2"

Dann nutzen Sie „svnlook dirs-changed $ 1 -R 2 $ "um den Weg zu bekommen, der gerade begangen wurde. Dann können Sie überprüfen, welches Repository Sie erstellen möchten. Stellen Sie sich vor, Sie haben hundertausend Projekte. Sie können das gesamte Repository nicht überprüfen?

Sie können mein Skript Check-out von github

ich dieses Skript geschrieben, da ich Python nur lernen, und jetzt mit noch. Ich hatte vor, es zu verbessern, aber neue Projekte und Dinge halten mich immer fest. Jeder hat gute Kenntnisse von Python definitiv besser eingebautes Werkzeug. Wenn jemand teilen könnte, würde es gerne haben.

-1

Sie können einen Post-Commit-Hook verwenden.

Setzen Sie das Post-Commit-Hook-Skript in den Ordner hooks, erstellen Sie wget_folder in Ihrem Laufwerk C: \, und legen Sie die Datei wget.exe in diesen Ordner. Fügen Sie den folgenden Code in der Datei namens post-commit.bat

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%  

wo Test = Name des Jobs

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

0

Würdest du GitHub anstelle von SVN empfehlen, um die Builds auszulösen? Eigentlich kenne ich nur SVN, aber ich frage mich, warum so viele Leute GitHub stattdessen verwenden.

0

Sie benötigen nur ein Plugin, das Subversion-Plugin ist. dann einfach, geht in jenkins-> job_name-> Trigger Abschnitt Erstellen -> (i) Trigger Ferne aufbauen (dh von Skripten) Token-Authentifizierung: -Token_name

geht dann Haken SVN-Server-Verzeichnis dann nach Brand unter Befehle: - (a) cp post-commit.tmpl nach Festschreibung (b) chmod 777 nach Festschreibung (c) chown -R www-Daten: www-data post-commit (d) vi post- commit hinweis: Alle Zeilen sollten kommentiert werden hinzufügen unter der Zeile zuletzt synta x (für Linux Benutzer): -/usr/bin/curl http://username:[email protected]:8081/job/job_name/build?token=Token_name

Syntax (für Windows User): - C:/curl_for_win/curl http://username:[email protected]:8081/job/job_name/build?token=Token_name

Verwandte Themen