Gibt es eine Möglichkeit, Hudson / Jenkins-Konfigurationsdateien in der Quellcodeverwaltung zu halten?

140

Ich bin neu bei Hudson / Jenkins und habe mich gefragt, ob es eine Möglichkeit gibt, Hudsons Konfigurationsdateien zur Quellcodeverwaltung einzuchecken.

Idealerweise möchte ich in der Benutzeroberfläche auf eine Schaltfläche mit der Aufschrift "Konfiguration speichern" klicken und die Hudson-Konfigurationsdateien zur Quellcodeverwaltung einchecken lassen können.

Yuval Roth
quelle
Oder Sie können diese Informationen bei Bedarf in einem Git-Repo speichern: siehe meine Antwort unten
VonC
Überprüfen Sie das Verzeichnis : HUDSON_HOME auf die Struktur der Jenkins-Dateien.
Kenorb

Antworten:

62

Hilfreichste Antwort

Es gibt ein Plugin namens SCM Sync Konfigurations-Plugin .


Ursprüngliche Antwort

Schauen Sie sich meine Antwort auf eine ähnliche Frage an. Die Grundidee ist, das Dateisystem-scm-Plugin zu verwenden, um Änderungen an den XML-Dateien zu erkennen. Ihr zweiter Teil würde die Änderungen an SVN festschreiben.

BEARBEITEN: Wenn Sie einen Weg finden, den Benutzer für eine Änderung zu bestimmen, lassen Sie es uns wissen.

EDIT 2011-01-10 Mittlerweile gibt es ein neues Plugin: SCM Sync Konfigurations-Plugin . Derzeit funktioniert es nur mit Subversion und Git, aber die Unterstützung für weitere Repositorys ist geplant. Ich benutze es seit Version 0.0.3 und es hat bisher gut funktioniert.

Peter Schuetze
quelle
2
Ich bin anderer Meinung: Das Plugin weist einige große Schwächen auf, wenn Sie Git verwenden und in einer komplexen Umgebung arbeiten: 'Wenn Sie Git verwenden, sollten Sie den SSH-Schlüssel mit dem Standardnamen verwenden. Es ist "id_rsa". SCM Sync bietet keine Option zum Angeben des SSH-Schlüsselpfads. SCM Sync verwendet .ssh / id_rsa aus dem Home-Verzeichnis des Jenkins-Prozessbesitzers. ' von [ wiki.jenkins-ci.org/display/JENKINS/…
Ben Hutchison
2
Das SCM Sync Configuration Plugin ist nicht kompatibel mit dem Subversion Plugin> = 2.0 (per issue.jenkins-ci.org/browse/JENKINS-21640 ).
Nick Jones
1
Ich werde die Verwendung dieses speziellen Plugins nicht empfehlen, Jenkins nach der Installation sind nicht aufgetaucht. Es scheint viele Fehler in diesem Plugin zu geben und es wird nicht zu häufig aktualisiert / behoben. Vermeiden Sie "SCM Sync Configuration Plugin"
Vikramvi
1
@ Vikramvi, was ist die Alternative, die Sie vorschlagen?
Igor Rodriguez
1
@IgorRodriguez Da Jenkins Job im Vergleich zum Projektcode nicht häufig geändert wird; Ich mache Änderungen manuell an Github fest.
Vikramvi
38

Beachten Sie, dass Vogella eine aktuelle (Januar 2014, verglichen mit der Frage des OP Januar 2010) und andere Einstellung dazu hat.
Beachten Sie, dass das SCM Sync-Konfigurations-Plugin viele Commits generieren kann .
Anstatt sich auf ein Plugin und einen automatisierten Prozess zu verlassen, verwaltet er dieselbe Funktion manuell:

Speichern der Jobinformationen von Jenkins in Git

Ich fand die Anzahl der Commits etwas überwältigend, daher habe ich beschlossen, die Commits manuell zu steuern und nur die Jobinformationen und nicht die Jenkins-Konfiguration zu speichern.
Wechseln Sie dazu in Ihr Jenkins-Jobverzeichnis (Ubuntu :) /var/lib/jenkins/jobsund führen Sie den git initBefehl " " aus.

Ich habe die folgende .gitignoreDatei erstellt, um nur die Git-Jobinformationen zu speichern:

builds/
workspace/
lastStable
lastSuccessful
nextBuildNumber
modules/
*.log

Jetzt können Sie Änderungen nach eigenem Ermessen hinzufügen und festschreiben.
Wenn Sie Ihrem Git-Repository eine weitere Fernbedienung hinzufügen, können Sie Ihre Konfiguration auf einen anderen Server übertragen.

Alberto empfiehlt tatsächlich, auch (in $JENKINS_HOME) hinzuzufügen :

  • Jenkins eigene config ( config.xml),
  • die jenkins plugins configs ( hudson*.xml) und
  • die Benutzer configs ( users/*/config.xml)
VonC
quelle
Würde das Speichern der Benutzerkonfigurationen nicht die Klartext-API-Token in ihren verfügbar machen config.xml?
Boon
@Boon Ich weiß es eigentlich nicht, da ich in letzter Zeit kein API-Token verwenden musste. Das könnte eine gute Frage für Sie sein.
VonC
2
Nach einigen Recherchen stellt sich heraus, dass die API-Token in XML verschlüsselt sind, sodass dies kein Sicherheitsrisiko darstellt.
Boon
19

Um Ihre Konfiguration mit Git manuell zu verwalten, kann die folgende Gitignore-Datei hilfreich sein.

# Miscellaneous Hudson litter
*.log
*.tmp
*.old
*.bak
*.jar
*.json

# Generated Hudson state
/.owner
/secret.key
/queue.xml
/fingerprints/
/shelvedProjects/
/updates/

# Tools that Hudson manages
/tools/

# Extracted plugins
/plugins/*/

# Job state
builds/
workspace/
lastStable
lastSuccessful
nextBuildNumber

Weitere Informationen finden Sie in diesem GitHub-Gist und in diesem Blog-Beitrag .

Emil Setz dich
quelle
14

Es gibt ein neues SCM Sync Configuration-Plug-In, das genau das tut, was Sie suchen.

SCM-Synchronisierungskonfiguration Das Hudson-Plugin zielt auf zwei Hauptfunktionen ab:

  • Synchronisieren Sie Ihre config.xml (und andere Ressourcen) Hudson-Dateien mit einem SCM-Repository
  • Verfolgen Sie Änderungen (und den Autor), die an jeder Datei vorgenommen wurden, mit Commit-Nachrichten

Ich habe das noch nicht ausprobiert, aber es sieht vielversprechend aus.

Matt Solnit
quelle
3
Ich wäre an einer funktionierenden Konfiguration des SCM-Synchronisierungskonfigurations-Plug-Ins mit Git interessiert. Ich habe verschiedene Konfigurationen ausprobiert und konnte es einfach nicht zum Laufen bringen (und die Fehlermeldungen in den Protokollen waren bestenfalls nicht hilfreich).
Sebastiano Pilla
8

Sie finden Konfigurationsdateien im Jenkins-Home-Ordner (z /var/lib/jenkins. B. ).

Um sie in VCS zu behalten, melden Sie sich zuerst als Jenkins ( sudo su - jenkins) an und erstellen Sie die Git-Anmeldeinformationen:

git config --global user.name "Jenkins"
git config --global user.email "[email protected]"

Initialisieren, fügen Sie dann die Basisdateien hinzu, und fügen Sie sie fest, z.

git init
git add config.xml jobs/ .gitconfig
git commit -m'Adds Jenkins config files' -a

Ziehen Sie auch in Betracht, .gitignoremit den folgenden zu ignorierenden Dateien zu erstellen (nach Bedarf anpassen):

# Git untracked files to ignore.

# Cache.
.cache/

# Fingerprint records.
fingerprints/

# Working directories.
workspace/

# Secret files.
secrets/
secret.*
*.enc
*.key
users/
id_rsa

# Plugins.
plugins/

# State files.
*.state

# Job state files.
builds/
lastStable
lastSuccessful
nextBuildNumber

# Updates.
updates/

# Hidden files.
.*
# Except git config files.
!.git*
!.ssh/

# User content.
userContent/

# Log files.
logs/
*.log

# Miscellaneous litter
*.tmp
*.old
*.bak
*.jar
*.json
*.lastExecVersion

Dann fügen Sie es hinzu : git add .gitignore.

Wenn Sie fertig sind, können Sie Jobkonfigurationsdateien hinzufügen, z

shopt -s globstar
git add **/config.xml
git commit -m'Added job config files' -a

Fügen Sie schließlich bei Bedarf weitere Dateien hinzu, schreiben Sie sie fest und übertragen Sie sie in das Remote-Repository, in dem Sie die Konfigurationsdateien aufbewahren möchten.


Wenn Jenkins-Dateien aktualisiert werden, müssen Sie sie neu laden ( Konfiguration von Festplatte neu laden ) oder über die reload-configurationJenkins-CLI ausführen .

Kenorb
quelle
Warum werden die Site-weiten Konfigurationen ausgeschlossen? Ich sehe, dass andere Antworten sie enthalten.
Vincent Beltman
@kenorb Ich würde es wieder ausschließen. Eine Kommentarzeile oben *.xmländert die Regel nicht und git ignoriert alle XML-Dateien, einschließlich config.xmldes jobsVerzeichnisses. git statusDaraufhin ignoriert es stillschweigend jedes neue Projekt.
Mikolasan
5

Ich bevorzuge es, alles im Jenkins-Home-Ordner auszuschließen, außer den Konfigurationsdateien, die Sie wirklich in Ihrem VCS haben möchten. Hier ist die .gitignoreDatei, die ich benutze:

*
!.gitignore
!/jobs/*/*.xml
!/*.xml
!/users/*/config.xml
!*/

Dies ignoriert alles ( *) außer ( !) .gitignoreselbst, die Jobs / Projekte, das Plugin und andere wichtige und Benutzerkonfigurationsdateien.

Es lohnt sich auch, den pluginsOrdner einzuschließen. Ärgerlich aktualisierte Plugins sollten enthalten sein ...

Grundsätzlich erleichtert diese Lösung zukünftige Jenkins / Hudson-Updates, da neue Dateien nicht automatisch in den Geltungsbereich fallen. Sie kommen einfach auf die Bühne, was Sie wirklich wollen.

nepa
quelle
5

Eine genauere .gitignore, inspiriert von der Antwort von nepa :

*
!.gitignore
!/jobs/
!/jobs/*/
/jobs/*/*
!/jobs/*/config.xml
!/users/
!/users/*/
/users/*/*
!/users/*/config.xml
!/*.xml

Es ignoriert alles außer .xmlKonfigurationsdateien und sich .gitignoreselbst. (der Unterschied zu nepa ‚s .gitignoreist , dass es nicht‚unignore‘alle Top-Level - Verzeichnisse ( !*/) wie logs/, cache/usw.)

Andrey
quelle
2

Die Antwort von Mark ( https://stackoverflow.com/a/4066654/142207 ) sollte für SVN und Git funktionieren (obwohl die Git-Konfiguration für mich nicht funktioniert hat).

Wenn Sie es jedoch für die Arbeit mit Mercurial Repo benötigen, erstellen Sie einen Job mit dem folgenden Skript:

hg remove -A || true
hg add ../../config.xml
hg add ../../*/config.xml
if [ ! -z "`hg status -admrn`" ]; then
    hg commit -m "Scheduled commit" -u [email protected]
    hg push
fi
Okigan
quelle
2

Ich habe ein Plugin geschrieben , mit dem Sie Ihre Jenkins-Anweisungen in die Quellcodeverwaltung einchecken können. Fügen Sie einfach eine .jenkins.ymlDatei mit dem Inhalt hinzu:

script:
    - make
    - make test

und Jenkins wird es tun:

Geben Sie hier die Bildbeschreibung ein

Wilfred Hughes
quelle
0

Ich habe Hudson komplett eingecheckt, Sie könnten dies als Ausgangspunkt verwenden https://github.com/morkeleb/continuous-delivery-with-hudson

Es hat Vorteile, den ganzen Hudson in Git zu halten. Alle Konfigurationsänderungen werden protokolliert und Sie können den Testup ganz einfach auf einem Computer testen und dann die anderen Computer mit Git Pull aktualisieren.

Wir haben dies als Boilerplate für unser Hudson Continuous Delivery Setup bei der Arbeit verwendet.

Grüße Morten

Morten
quelle