Czy istnieje sposób na utrzymanie plików konfiguracyjnych Hudson / Jenkins w kontroli źródła?

140

Jestem nowy w Hudson / Jenkins i zastanawiałem się, czy istnieje sposób na sprawdzenie plików konfiguracyjnych Hudsona w kontroli źródła.

Najlepiej byłoby móc kliknąć przycisk w interfejsie użytkownika, który mówi „zapisz konfigurację” i mieć pliki konfiguracyjne Hudson zaewidencjonowane do kontroli źródła.

Yuval Roth
źródło
Lub możesz przechowywać te informacje w repozytorium Git na żądanie: zobacz moją odpowiedź poniżej
VonC
Sprawdź: katalog HUDSON_HOME pod kątem struktury plików Jenkins.
kenorb

Odpowiedzi:

62

Najbardziej pomocna odpowiedź

Istnieje wtyczka zwana wtyczką konfiguracyjną SCM Sync .


Oryginalna odpowiedź

Spójrz na moją odpowiedź na podobne pytanie. Podstawowym pomysłem jest użycie wtyczki filesystem-scm-plugin do wykrywania zmian w plikach xml. Twoja druga część polegałaby na zatwierdzeniu zmian w SVN.

EDYCJA: Jeśli znajdziesz sposób na określenie użytkownika wymagającego zmiany, daj nam znać.

EDYCJA 2011-01-10 W międzyczasie pojawiła się nowa wtyczka: wtyczka konfiguracyjna SCM Sync . Obecnie działa tylko z subversion i git, ale planowane jest wsparcie dla większej liczby repozytoriów. Używam go od wersji 0.0.3 i do tej pory działał dobrze.

Peter Schuetze
źródło
2
Muszę się różnić: wtyczka ma kilka poważnych słabości, jeśli używasz git i działasz w złożonym środowisku: „Jeśli używasz Gita, powinieneś użyć klucza SSH z domyślną nazwą. To „id_rsa”. SCM Sync nie ma opcji określania ścieżki klucza ssh. SCM Sync używa .ssh / id_rsa z katalogu domowego właściciela procesu Jenkins. ' z [ wiki.jenkins-ci.org/display/JENKINS/…
Ben Hutchison
2
Wtyczka konfiguracji synchronizacji SCM jest niekompatybilna z wtyczką Subversion> = 2.0 (per Issues.jenkins-ci.org/browse/JENKINS-21640 ).
Nick Jones
1
Nie polecam używania tej konkretnej wtyczki, jenkins po instalacji nie pojawił się. Wydaje się, że w tej wtyczce jest wiele błędów i nie jest ona aktualizowana / poprawiana zbyt często. Unikaj „wtyczki konfiguracyjnej SCM Sync”
vikramvi
1
@vikramvi, jaką alternatywę proponujesz?
Igor Rodriguez
1
@IgorRodriguez Praca jenkinsa nie podlega częstym zmianom w porównaniu z kodem projektu; Wprowadzam zmiany ręcznie na githubie.
vikramvi
38

Zwróć uwagę, że Vogella ma niedawne (styczeń 2014, w porównaniu do pytania PO w styczniu 2010) i inne podejście do tego zagadnienia.
Weź pod uwagę, że wtyczka konfiguracyjna SCM Sync może generować wiele zatwierdzeń.
Więc zamiast polegać na wtyczce i zautomatyzowanym procesie, zarządza tą samą funkcją ręcznie:

Przechowywanie informacji o zadaniach Jenkinsa w Git

Liczba zatwierdzeń była nieco przytłaczająca, więc zdecydowałem się kontrolować je ręcznie i zapisać tylko informacje o zadaniu, a nie konfigurację Jenkinsa.
W tym celu przejdź do katalogu zadań Jenkins (Ubuntu:) /var/lib/jenkins/jobsi wykonaj polecenie „ git init”.

Utworzyłem następujący .gitignoreplik, aby przechowywać tylko informacje o zadaniach Git:

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

Teraz możesz dodawać i zatwierdzać zmiany według własnego uznania.
A jeśli dodasz kolejnego pilota do repozytorium Git, możesz przesłać swoją konfigurację na inny serwer.

Alberto faktycznie poleca również dodanie (w $JENKINS_HOME):

  • Jenkins posiada własną konfigurację ( config.xml),
  • wtyczki jenkins configs ( hudson*.xml) i
  • konfiguracje użytkowników ( users/*/config.xml)
VonC
źródło
Czy przechowywanie konfiguracji użytkownika nie ujawniłoby tokenów API w postaci zwykłego tekstu config.xml?
Boon
@Boon Właściwie to nie wiem, ponieważ ostatnio nie musiałem używać tokena API. Samo to może być dobre pytanie.
VonC,
2
Po kilku badaniach okazuje się, że tokeny API są zaszyfrowane w XML, więc nie stanowiłoby to zagrożenia dla bezpieczeństwa.
Boon
19

Aby ręcznie zarządzać konfiguracją za pomocą Git, pomocny może być następujący plik .gitignore.

# 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

Zobacz ten GitHub Gist i ten wpis na blogu, aby uzyskać więcej informacji.

Emil Sit
źródło
14

Dostępna jest nowa wtyczka konfiguracji synchronizacji SCM, która robi dokładnie to, czego szukasz.

Wtyczka SCM Sync Configuration Hudson ma na celu 2 główne funkcje:

  • Zsynchronizuj swoje config.xml (i inne zasoby) pliki hudson z repozytorium SCM
  • Śledź zmiany (i autora) wprowadzone w każdym pliku za pomocą komunikatów o zatwierdzeniu

Właściwie jeszcze tego nie próbowałem, ale wygląda obiecująco.

Matt Solnit
źródło
3
Byłbym zainteresowany działającą konfiguracją wtyczki SCM Sync Configuration z Git, wypróbowałem kilka konfiguracji i po prostu nie mogłem sprawić, by działało (a komunikaty o błędach w dziennikach były w najlepszym przypadku nieprzydatne).
Sebastiano Pilla
8

Pliki konfiguracyjne można znaleźć w folderze domowym Jenkins (np /var/lib/jenkins.).

Aby zachować je w VCS, najpierw zaloguj się jako Jenkins ( sudo su - jenkins) i utwórz jego poświadczenia git:

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

Następnie zainicjalizuj, dodaj i zatwierdź podstawowe pliki, takie jak:

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

rozważ również utworzenie .gitignorez następującymi plikami do zignorowania (dostosuj w razie potrzeby):

# 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

Następnie dodać: git add .gitignore.

Po zakończeniu możesz dodać pliki konfiguracyjne zadania, np

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

Na koniec dodaj i zatwierdź wszelkie inne pliki, jeśli to konieczne, a następnie prześlij je do zdalnego repozytorium, w którym chcesz zachować pliki konfiguracyjne.


Gdy pliki Jenkins są aktualizowane, należy je ponownie załadować ( Załaduj ponownie konfigurację z dysku ) lub uruchomić reload-configurationz interfejsu wiersza polecenia Jenkins.

kenorb
źródło
Dlaczego konfiguracje obejmujące całą witrynę są wykluczone? Widzę, że inne odpowiedzi je zawierają.
Vincent Beltman,
@kenorb Wykluczę go ponownie. Linia komentarza powyżej *.xmlnie zmienia reguły i git ignoruje wszystkie pliki xml, w tym pliki config.xmlz jobskatalogu, git statuspo cichu ignoruje każdy nowy projekt.
Mikolasan
5

Wolę wykluczyć wszystko w folderze domowym Jenkins z wyjątkiem plików konfiguracyjnych, które naprawdę chcesz mieć w swoim VCS. Oto .gitignoreplik, którego używam:

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

To ignoruje wszystko ( *) z wyjątkiem samego ( !) .gitignore, zadań / projektów, wtyczki i innych ważnych plików konfiguracyjnych użytkownika.

Warto również rozważyć dołączenie rozszerzenia plugins folderu. Irytująco zaktualizowane wtyczki powinny zostać uwzględnione ...

Zasadniczo to rozwiązanie ułatwia przyszłe aktualizacje Jenkins / Hudson, ponieważ nowe pliki nie są automatycznie objęte zakresem. Po prostu wejdź na ekran, czego naprawdę chcesz.

nepa
źródło
5

Bardziej trafne .gitignore, inspirowane odpowiedzią Nepa :

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

Ignoruje wszystko oprócz .xmlplików konfiguracyjnych i .gitignoresiebie. (różnica do Nepa „s .gitignorejest to, że nie«ignoruj»wszystkie katalogi najwyższego poziomu ( !*/) jak logs/, cache/itp)

Andrey
źródło
2

Odpowiedź Marka ( https://stackoverflow.com/a/4066654/142207 ) powinna działać dla SVN i Git (chociaż konfiguracja Gita nie działała dla mnie).

Ale jeśli potrzebujesz go do pracy z repozytorium Mercurial, utwórz zadanie za pomocą następującego skryptu:

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
źródło
2

Napisałem wtyczkę, która pozwala sprawdzić instrukcje Jenkinsa w kontroli źródła. Wystarczy dodać .jenkins.ymlplik z zawartością:

script:
    - make
    - make test

a Jenkins to zrobi:

wprowadź opis obrazu tutaj

Wilfred Hughes
źródło
0

Zameldowałem się całkowicie w hudsonie, możesz użyć tego jako punktu wyjścia https://github.com/morkeleb/continuous-delivery-with-hudson

Utrzymanie całego hudsona w gicie ma zalety. Wszystkie zmiany w konfiguracji są rejestrowane i możesz łatwo przetestować testowanie na jednym komputerze, a następnie zaktualizować inne komputery za pomocą git pull.

Wykorzystaliśmy to jako szablon dla naszej konfiguracji ciągłej dostawy Hudson w pracy.

Pozdrawiam Morten

Morten
źródło