Jak bezpiecznie zrestartować Jenkins?

19

Muszę wprowadzić pewne zmiany konfiguracji w naszym wystąpieniu Jenkins, które będą wymagały ponownego uruchomienia Jenkins kilka razy. Jednak nasi programiści zobowiązują się na tyle często, że nie widziałem Jenkinsa bez zadań uruchomionych od trzech dni.

Czy istnieje natywny sposób (za pośrednictwem GUI lub wiersza poleceń) bezpiecznego restartowania Jenkinsa? IE: poczekaj na zakończenie bieżących zadań, zanim przejdziesz na dół, i śledź kolejki zadań, które rozpoczną się po powrocie Jenkinsa.

Wiem, że jest wtyczka, ale aby ją zainstalować, muszę ponownie uruchomić Jenkins ...

Alex
źródło
Zgadnij z góry mojej głowy, ale czy wyłączenie opcji niewolników nie jest opcją? (o ile dobrze pamiętam, nie przerywa on bieżących zadań, ale uniemożliwia uruchomienie dodatkowych zadań w kolejce do uruchomienia)
Tensibai
Teoretycznie, przy poprawnie skonfigurowanej instancji Jenkins z uruchomionymi zadaniami Pipeline, możesz ponownie uruchomić węzły master lub slave, kiedy tylko chcesz. Moje doświadczenie mówi jednak inaczej.
jayhendren

Odpowiedzi:

14

Jeśli nawigujesz $YOUR_JENKINS_URL/updateCenter/, powinieneś zobaczyć następującą stronę:

Tutaj możesz sprawdzić, Restart Jenkins when installation is complete and no jobs are runningktóre powinny być dość bezpieczne.

eyalzek
źródło
Rozumiem, że ponowne uruchomienie nastąpi tylko wtedy, gdy wtyczki są w trakcie instalowania ... nie ma sposobu, aby wymusić ponowne uruchomienie bez instalowania wtyczek, prawda?
Alex
1
@Alex Właśnie przetestowałem to na mojej instancji i dla mnie wydaje się, że zawsze działa, niezależnie od instalacji wtyczki. Według stackoverflow.com/a/8077830 powinny również istnieć punkty końcowe /safeRestarti /restart.
eyalzek
1
Ale czy nie jest pytanie o ponowne uruchomienie, gdy zadania są uruchomione?
Dan Cornilescu
@ DanCornilescu pytanie brzmi: IE: wait for current jobs to finish before going down, and keep track of queued jobs to start once Jenkins comes back up.dokładnie tak dzieje się, gdy zaznaczysz to pole.
eyalzek
Zadawałem pytanie, ponieważ pytanie to również mówi Jenkins without jobs running in three days- co oznacza, że ​​będzie to miało wpływ, ponieważ niektóre prace zostaną opóźnione. Ale wciąż lepsze niż utrata pracy.
Dan Cornilescu
15

Odwiedzając stronę https: // youjenkinsdomain / safeRestart ustawisz ją w trybie, gdy będzie czekał na zatrzymanie zadań, a następnie uruchomi się ponownie.

Nakilon
źródło
2
Musiałem użyć tej konkretnej odpowiedzi, gdy nasz serwer Jenkins się wyłączył i nie udało się zrestartować, gdy wtyczka go wymagała.
kayleeFrye_onDeck
8

Możesz wykonać komendę safeRestart za pomocą interfejsu API Jenkins Rest API ( [jenkins_url] / safeRestart ) lub komendę za pomocą interfejsu Jenkins CLI .

sudo /etc/init.d/jenkins safeRestart

Uruchamianie polecenia CLI

Ogólna składnia jest następująca (projekt jest podobny do narzędzi takich jak svn / git):

java -jar jenkins-cli.jar [-s JENKINS_URL] polecenie [opcje ...] [argumenty ...]

JENKINS_URL można określić za pomocą zmiennej środowiskowej $ JENKINS_URL. Ta zmienna środowiskowa jest ustawiana automatycznie, gdy Jenkins rozwidla proces podczas kompilacji, co pozwala na korzystanie z interfejsu Jenkins CLI z kompilacji bez jawnej konfiguracji adresu URL.

UWAGA: Po uruchomieniu polecenia safeRestart wszelkie zadania ustawione do wykonania podczas restartu zostaną umieszczone w kolejce i wykonane, gdy serwer będzie z powrotem w trybie online. Upewnij się, że nie spowoduje to żadnych konfliktów po ponownym uruchomieniu!

PrestonM
źródło
1

Myślę, że to prawdziwy problem, który wielu próbuje rozwiązać. Czasami lepiej jest zrestartować Jenkins po instalacji wtyczki. Jedną z sugestii, które mogę przedstawić na podstawie mojego doświadczenia, jest:

  • Ogranicz dostęp do modułu administratora, aby nie każdy programista mógł instalować wtyczki
  • Poinstruuj programistów o przestojach i poinformuj ich z wyprzedzeniem
  • Zainstaluj wszystkie wymagane wtyczki masowo i zrestartuj Jenkins
  • Poinformuj programistów, że Jenkins jest gotowy do użycia

Rozumiem, że wymaga to ręcznego wysiłku i koordynacji. Ale do tej pory działało to tak dobrze w naszym projekcie, nie wspominając o niczym złym.

Karthik Venkatesan
źródło
1

Aby ręcznie zrestartować Jenkins, możesz użyć jednego z następujących poleceń (wpisując ich adres URL w przeglądarce):

(jenkins_url)/safeRestart- Pozwala na zakończenie wszystkich uruchomionych zadań. Nowe zadania pozostaną w kolejce do uruchomienia po zakończeniu ponownego uruchomienia.

(jenkins_url)/restart - Wymusza restart bez oczekiwania na zakończenie kompilacji.

Subhash
źródło
0

Odwiedzanie „ https: // jenkins / safeRestart ” nie czeka na całkowite zakończenie „zadań / kompilacji” w przypadku zadań potokowych.

Wygląda na to, że czeka na wykonanie kroków i zrestartuje jenkins i wznowi pipeline po ponownym pojawieniu się jenkins.

Muhammad Faizan-Ul-Haq
źródło
1
Myślę, że to ma być komentarz do odpowiedzi @Nakilon?
hagello
0

Ponowne uruchomienie ma wpływ na Jenkins. Z mojego doświadczenia wynika, że ​​kompilacja może się nie powieść z powodu ponownego uruchomienia, ale są one rzadkie.

Tam, gdzie pracuję, musieliśmy regularnie restartować Jenkinsa. Mamy każdy rodzaj pracy, jaką możesz sobie wyobrazić, niektóre małe, niektóre ogromne. Tylko raz widzieliśmy niepowodzenie kompilacji, w której marynata nie była nawadniana.

Następnie zawsze przeprowadzamy teraz bezpieczne ponowne uruchomienie.

Gi0rgi0s
źródło