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.


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.


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)

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.


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.


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 "jenkins@example.com"

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.


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.


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)


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 fill_in_the@blank.com
    hg push
fi

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


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.