Jak przenieść Jenkins z jednego komputera na inny

154

Obecnie używam Jenkinsa na moim komputerze deweloperskim. Zainstalowałem go na moim komputerze deweloperskim, ponieważ miałem ograniczoną wiedzę na temat tego narzędzia; więc przetestowałem to na moim komputerze deweloperskim. Teraz czuję się dobrze z Jenkinsem jako moim długoterminowym „partnerem” w procesie budowania i chciałbym „przenieść” tego Jenkinsa na dedykowany serwer.

Wcześniej wykonałem kilka kompilacji i zarchiwizowałem artefakty z każdej kompilacji. W szczególności numer kompilacji jest dla mnie bardzo ważny przy kontroli wersji.

Jak mogę wyeksportować wszystkie informacje Jenkins z mojego obecnego komputera na nowy serwer?

huahsin68
źródło
6
Właśnie to zrobiłem. Postępowałem zgodnie z instrukcjami Cédrica Juliena, ale odkryłem, że w systemie Windows muszę uruchomić instalację naprawczą, zanim Jenkins mógł pomyślnie uruchomić się po przeniesieniu. Po naprawie wszystko jest w porządku.
Smurph269

Odpowiedzi:

175

Postępując zgodnie z wiki Jenkins , będziesz musiał:

  • Zainstaluj nową instancję Jenkins na nowym serwerze
  • Upewnij się, że stare i nowe instancje Jenkinsa zostały zatrzymane
  • Zarchiwizuj całą zawartość JENKINS_HOME starej instancji Jenkins
  • Rozpakuj archiwum do nowego katalogu JENKINS_HOME
  • Uruchom nową instancję Jenkins
  • Nie zapomnij zmienić dokumentacji / linków do nowej instancji Jenkins :)
  • Nie zapomnij zmienić właściciela nowych plików Jenkins: chown -R jenkins:jenkins $JENKINS_HOME

JENKINS_HOME jest domyślnie znajduje się ~/.jenkinsna instalację systemu Linux, jeszcze dokładnie dowiedzieć się, gdzie się znajduje, przejdź na http: // your_jenkins_url / configure stronie i sprawdzić wartość pierwszego parametru: Home directory; to jest JENKINS_HOME.

Cédric Julien
źródło
1
Kiedy uruchomiłem nowe jenkins, moje węzły są wyświetlane, co jest poprawne. Ale kiedy kliknąłem na jakiś węzeł, adresy URL wskazują na stare jenkins, jak poniżej: Uruchom z wiersza poleceń slave: javaws old-jenkins-server: 8080 / computer / slaveMachine1 / slave-agent.jnlp Lub jeśli slave jest bez głowy: java -jar slave.jar -jnlpUrl old-jenkins-server: 8080 / computer / slaveMachine1 / slave-agent.jnlp Teraz Jak ustawić te adresy URL dla każdego węzła, aby wskazywały na serwer new-jenkins?
merlachandra
13
Mam rozwiązanie mojego problemu wspomnianego w moim poprzednim komentarzu: Idź do Zarządzaj Jenkinsem> skonfiguruj system. Tutaj, w sekcji „Lokalizacja Jenkins”, w polu „Adres URL Jenkinsa”, zmień adres URL, aby wskazywał na nowy serwer Jenkins.
merlachandra
3
pamiętaj, aby skopiować również ukryte foldery!
mohi
7
haha +1 za „nie zapomnij zmienić dokumentacji / linków do swojej nowej instancji Jenkinsa”
Iain Smith
2
Miałem problemy z poprawnymi uprawnieniami do plików i własnością, aby to naprawić, użyłem tego skryptu dockera
marcinj
53

W przypadku, gdy katalog JENKINS_HOME jest zbyt duży, aby go skopiować , a wszystko, czego potrzebujesz, to skonfigurować te same zadania, wtyczki Jenkins i konfiguracje Jenkins (i nie potrzebujesz starych artefaktów i raportów Job), możesz użyć wtyczki ThinBackup :

  1. Zainstaluj ThinBackup na źródłowym i docelowym serwerze Jenkins
  2. Skonfiguruj katalog kopii zapasowych na obu (w Manage Jenkins -> ThinBackup -> Settings)

  3. W Sourse Jenkins przejdź do ThinBackup -> Backup Now

  4. Skopiuj z katalogu kopii zapasowej źródła Jenkins do katalogu docelowego kopii zapasowej Jenkins
  5. Na docelowym Jenkinsie przejdź do ThinBackup -> Przywróć, a następnie uruchom ponownie usługę Jenkins.
  6. Jeśli brakuje niektórych wtyczek lub zadań, skopiuj zawartość kopii zapasowej bezpośrednio do docelowego JENKINS_HOME.

  7. Jeśli miałeś uwierzytelnianie użytkownika w źródłowym Jenkinsie, a teraz jest zablokowany na docelowym Jenkinsie, edytuj plik Jenkins config.xml, ustaw <useSecurity>na false i zrestartuj Jenkins.

Noam Manos
źródło
2
Dlaczego katalog JENKINS_HOME miałby kiedykolwiek być zbyt duży, aby go skopiować? O jakich rozmiarach mówimy?
wotanii
9
mój jenkins_home ma około 100 GB, nie chcę go kopiować na nowy serwer, ponieważ jest to głównie wyrzucane rzeczy
user230910
3
Mój Jenkins_home ma ~ 4 TB, więc cienka kopia, która zawiera tylko konfigurację i żadna z historii kompilacji ani / usercontent, jest przydatna.
VolleyJosh
Niesamowite, wtyczki ... Naprawdę zaoszczędziłem dużo czasu ... radzenie sobie z
setkami
11

Pomogło mi to w przejściu z Ubuntu 12.04 (Jenkins w wersji 1.628) na Ubuntu 16.04 (Jenkins w wersji 1.651.2). Najpierw zainstalowałem Jenkins z repozytoriów .

  1. Zatrzymaj oba serwery Jenkins
  2. Skopiuj JENKINS_HOME(np. / Var / lib / jenkins) ze starego serwera na nowy. Z konsoli na nowym serwerze:

    rsync -av username@old-server-IP:/var/lib/jenkins/ /var/lib/jenkins/

  3. Uruchom nowy serwer Jenkins

Możesz tego nie potrzebować, ale ja musiałem

  • Manage Jenkinsi Reload Configuration from Disk.
  • Odłącz i ponownie podłącz wszystkie slave'y.
  • Sprawdź, czy w Configure System > Jenkins Location, Jenkins URLjest poprawnie przypisany do nowego serwera Jenkins.
Katu
źródło
Czy nowy Jenkins miał tę samą wersję, co stary?
Jakub Czaplicki
@JakubCzaplicki - Oba Jenkins były 1.6, ale nie dokładnie w tej samej wersji. Zaktualizowano odpowiedź. Następnie zaktualizowałem Ubuntu 16.04 do Jenkins 2.6, zastępując plik jenkins.war i działało dobrze. stackoverflow.com/questions/11062335/…
Katu
Po zrobieniu powyższego i odwiedzeniu /configureSecuritydostajęjava.lang.AssertionError: InstanceIdentity is missing its singleton
maxisme
@maxisme, późno, ale ten wątek sugeruje, że problem, o którym wspomniałeś, jest związany z wersją Java. Issues.jenkins-ci.org/browse/JENKINS-46182
Katu
1

Automatyzacja serwera Jenkins:

Krok 1:

Skonfiguruj repozytorium, aby przechowywać dom Jenkinsa (zadania, konfiguracje, wtyczki itp.) W lokalnym repozytorium GitLab lub w prywatnym repozytorium GitHub i regularnie je aktualizuj, wprowadzając wszelkie nowe zmiany w zadaniach Jenkinsa, wtyczkach itp.

Krok 2:

Skonfiguruj grupę / rolę hosta Puppet dla Jenkins, której można użyć do uruchomienia nowych serwerów Jenkins. Wykonaj całą podstawową konfigurację w przepisie Puppet i upewnij się, że instaluje najnowszą wersję Jenkinsa i ustawia osobny katalog / mount dla JENKINS_HOME.

Krok 3:

Uruchom nową maszynę, korzystając z powyższej konfiguracji Jenkins-puppet. Po zainstalowaniu wszystkiego pobierz / sklonuj konfigurację Jenkinsa z repozytorium Git do katalogu głównego Jenkinsa i zrestartuj Jenkins.

Krok 4:

Przejdź do adresu URL Jenkins, Zarządzaj JenkinsZarządzaj wtyczkami i zaktualizuj wszystkie wtyczki, które wymagają aktualizacji.

Gotowe

Możesz użyć Docker Swarm lub Kubernetes do automatycznego skalowania węzłów podrzędnych.

Ijaz Ahmad Khan
źródło
1

Czasami możemy nie mieć dostępu do maszyny Jenkins, aby skopiować folder bezpośrednio do innej instancji Jenkins. Napisałem więc narzędzie oparte na menu, które używa wywołań API REST Jenkins do instalowania wtyczek i zadań z jednej instancji Jenkinsa do drugiej.

W przypadku migracji wtyczek:

  1. POBIERZ żądanie: {SOURCE_JENKINS_SERVER}/pluginManager/api/json?depth=1wyświetli listę zainstalowanych wtyczek wraz z ich wersją.
  2. Możesz wysłać żądanie POST z następującymi parametrami, aby zainstalować te wtyczki.

    final_url=`{DESTINATION_JENKINS_SERVER}/pluginManager/installNecessaryPlugins`
    
    data=`<jenkins><install plugin="{PLUGIN_NAME}@latest"/></jenkins>` (where, latest will fetch the latest version of the plugin_name)
    
    auth=`(destination_jenkins_username, destination_jenkins_password)`
    
    header=`{crumb_field:crumb_value,"Content-Type":"application/xml”}` (where crumb_field=Jenkins-Crumb and get crumb value using API call {DESTINATION_JENKINS_SERVER}/crumbIssuer/api/json
    

W przypadku migracji zarobkowej:

  1. Możesz uzyskać listę zadań zainstalowanych na {SOURCE_JENKINS_URL}, korzystając z połączenia REST, {SOURCE_JENKINS_URL}/view/All/api/json
  2. Następnie możesz pobrać każdy plik config.xml zadania z zadań na {SOURCE_JENKINS_URL}, używając adresu URL zadania {SOURCE_JENKINS_URL}/job/{JOB_NAME}.
  3. Użyj tego pliku config.xml, aby POSTOWAĆ zawartość pliku XML na {DESTINATION_JENKINS_URL}, co spowoduje utworzenie zadania na {DESTINATION_JENKINS_URL}.

Stworzyłem narzędzie oparte na menu w Pythonie, które prosi użytkownika o rozpoczęcie migracji wtyczki lub Jenkinsa i używa do tego wywołań API Jenkins REST.

Możesz skierować plik JenkinsMigration.docxZ tego adresu URL

psalvi21
źródło
Chociaż ten link może odpowiedzieć na pytanie, lepiej jest zawrzeć tutaj zasadnicze części odpowiedzi i podać link do odniesienia. Odpowiedzi zawierające tylko łącze mogą stać się nieprawidłowe, jeśli połączona strona ulegnie zmianie.
vich