Automatische Hot-Deployment/Neustart von Jenkins+Tomcat und Lösungen für aufgetretene Probleme (empfohlen)

Automatische Hot-Deployment/Neustart von Jenkins+Tomcat und Lösungen für aufgetretene Probleme (empfohlen)

1. Hintergrund

Die Projekte des Unternehmens wurden immer manuell mit Maven verpackt, auf den Server hochgeladen und Tomcat geschlossen/geöffnet. Der gesamte Prozess ist zeitaufwändig und arbeitsintensiv. Obwohl alle Prozesse gleichzeitig durch Shell-Skripte gelöst werden können, wäre es zeit- und arbeitssparender, wenn das Jenkins-Plug-In von idea für die automatische Bereitstellung mit einem Klick verwendet werden könnte.

Nachfolgend finden Sie ein einfaches Shell-Skript zum Veröffentlichen von Tomcat. Voraussetzung für die Ausführung des folgenden Skripts ist die Installation von Git und Maven auf dem Server.

# Beenden Sie zuerst den Tomcat-Prozess kill -9 `ps aux|grep tomcat|grep -v 'grep'| awk 'NR==1{print $2}'`
# Wechseln Sie zum Projektspeicherort cd nxyyProjectSource/NXYY
# git pull den neuesten Code git pull xxxx
# Wechseln Sie zum Code-Speicherort unter dem Projekt cd nxyy
# Maven-Verpackung mvn clean
mvn install -DskipTests
# Legen Sie das War-Paket in die Tomcat-CD
cp nxyyProjektquelle/NXYY/nxyy/target/nxyy.war /home/tomcat/webapps
# Tomcat starten
cd /home/tomcat/bin
./startup.sh
# Zeigen Sie das Protokoll an tail -f ../logs/catalina.out

Jedes Mal, wenn Sie ein Git-File kopieren, benötigen Sie ein Passwort. Nach der folgenden Konfiguration müssen Sie das Passwort nur beim ersten Mal eingeben und es wird dauerhaft auf dem Server gespeichert. Beim nächsten Kopieren/Pullen eines Git-Files müssen Sie das Passwort nicht mehr eingeben:

git config --global credential.helper store

Wenn Sie Ihr Konto und Ihr Passwort löschen möchten, geben Sie Folgendes ein:

git config --global credential.helper zurücksetzen

Wenn Sie eine temporäre Speicherung wünschen (Standard 15 Minuten), geben Sie Folgendes ein:

git config --global credential.helper cache

Um ein Projekt von der Kennwortpflicht zu befreien, fügen Sie dem https-Link username:password hinzu.

git remote add origin https://Benutzername:[email protected]

Die obigen Konfigurationen werden in .git/config gespeichert.

2. Jenkins-Installation/Konfiguration/Hot Deployment/Skript-Tomcat-Neustart

Laden Sie das Installationspaket jenkins.war herunter; führen Sie im Stammpfad des Installationspakets den Befehl java -jar jenkins.war --httpPort=8080(linux環境、Windows環境都一樣),運行后有一個密碼,需要登錄時使用:

Öffnen Sie den Browser, rufen Sie den Link http://ip:8080 auf und geben Sie die Auswahl für die Plug-In-Installation ein. Es wird empfohlen, die empfohlenen Plug-Ins auszuwählen, um sicherzustellen, dass die grundlegenden, häufig verwendeten Funktionen verwendet werden können. Rufen Sie nach der Auswahl die Plug-In-Installationsseite auf. Wenn die Installation einiger Plug-Ins fehlschlägt, können Sie auf „Neu installieren“ klicken:

Legen Sie den anfänglichen Benutzer und das Kennwort für die nächste Anmeldung fest:

Melden Sie sich beim System an und die Installation ist abgeschlossen:

Hinweis: Wenn Sie das System immer noch nicht aufrufen können, müssen Sie eine Weile warten oder die Seite aktualisieren. Wenn Sie immer noch nicht aufrufen können, müssen Sie den Jenkins-Server neu starten. Fügen Sie einfach „restart“ nach der URL der Startseite hinzu [Restart: http://ip:8080/restart ]. Wenn Sie das Standardkennwort eingeben und immer wieder nicht weiterkommen:

In der Datei $JENKINS_HOME/hudson.model.UpdateCenter.xml lautet der Standardinhalt wie folgt:

<?xml version='1.0' encoding='UTF-8'?>
 <Websites>
 <Seite>
 <id>Standard</id>
 <url>http://updates.jenkins-ci.org/update-center.json</url>
 </Seite>
</Seiten>

Diese Adresse befindet sich auf einem fremden Server. Aufgrund der Firewall kann das für die Initialisierungsschnittstelle erforderliche Plug-In nicht heruntergeladen werden, sodass es sich im Wartezustand befindet. Durch Ändern der URL in http://mirror.xmission.com/jenkins/updates/update-center.json就解決了und der Zugriffspfad von Jenkins festgelegt. Dieser Pfad wird natürlich nach dem Erstellen eines Benutzernamens angezeigt:

Legen Sie die Installationsquelle des Plugins fest: Plugin-Verwaltung -> Erweitert, http://mirror.xmission.com/jenkins/updates/current/update-center.json

Führen Sie eine globale Toolkonfiguration für die Systemverwaltung durch, einschließlich Maven-, JDK- und Git-Konfiguration:

Erstellen Sie nach der Konfiguration das Projekt und wählen Sie „Neue Aufgabe“:

Bevor Sie die Projektinformationen konfigurieren, benötigen Sie einige Anmeldeinformationen, z. B. den Benutzernamen und das Kennwort von Git sowie den Benutzernamen und das Kennwort des Tomcat-Benutzers: Systemverwaltung -> Anmeldeinformationen verwalten

Der Tomcat-Benutzername und das Passwort sind erforderlich, damit Jenkins Tomcat remote veröffentlichen kann. Sie werden in tomcat-users.xml unter der Tomcat-Konfiguration konfiguriert: Für die Remote-Veröffentlichung von Tomcat müssen tomcat-users.xml, context.xml (die Falle, die in der folgenden Konstruktion auftritt, Punkt 5) und manager.xml (die Falle, die in der folgenden Konstruktion auftritt, Punkt 6) geändert werden.

<tomcat-users xmlns="http://tomcat.apache.org/xml"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"

    version="1.0">

 <Rolle Rollenname="manager-gui"/>
 <Rolle Rollenname="Manager-Skript"/>
 <Rolle Rollenname="manager-jmx"/>
 <Rolle Rollenname="Manager-Status"/>
 <Rolle Rollenname="admin-gui"/>
 <user username="Benutzername" password="Passwort" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-gui"/>
</tomcat-Benutzer>

Konfigurieren Sie die Projektinformationen und erstellen Sie sie nach der Konfiguration. Tomcat muss auf dem Server gestartet werden:

Oben ist die Hot-Bereitstellung von Tomcat. Das Folgende ist das Projekt zur Neustartausführung von Tomcat: Installieren Sie zuerst das Plug-In Publish Over SSH und konfigurieren Sie die Informationen: Systemverwaltung -> Informationskonfiguration -> Publish over SSH

Bevor Sie die Konfiguration erstellen, müssen Sie ein Skript zum Neustarten von Tomcat erstellen: vi tomcat.sh und dann die Ausführungsberechtigung chmod 777 tomcat.sh erteilen

#Hier muss die JAVA_HOME-Konfiguration hinzugefügt werden. Obwohl sie in den lokalen Umgebungsvariablen konfiguriert wurde, muss sie beim Remote-Aufruf noch konfiguriert werden, da sonst die Skriptausführung fehlschlägt.
export JAVA_HOME=/usr/java/jdk1.8.0_141-cloudera
# Standort von Tomcat
tomcat_home=/home/tomcat-dev
#【3.1】 Tomcat-Variablen stoppen
SHUTDOWN=$tomcat_home/bin/shutdown.sh
#【3.2】 Tomcat-Variablen starten
STARTTOMCAT=$tomcat_home/bin/startup.sh
#【3.3】 Löschen Sie alle Projektdateien, einschließlich War-Paket und dekomprimierter War-Dateien. Wenn es sich um eine Teilveröffentlichung handelt, ist dieser Satz nicht erforderlich. Dies dient nur dazu, dass Jenkins den gesamten War veröffentlicht.
rm -rf /home/tomcat-dev/webapps/TSISAPP*

#Holen Sie sich die Prozess-ID. Diese kann auch abgekürzt werden. Wenn Sie die PID mit ps -ef|grep des Projektnamens erhalten, können Sie sie direkt wie folgt schreiben:
#Warum wurde es so lange vorher geschrieben? Weil, wenn Jenkins das Skript aufruft, es auch den Prozess von Jenkins startet, der das Skript aufruft. Kill -9 beendet also den Jenkins-Prozess und führt dazu, dass die erste Konstruktionsfreigabe unterbrochen wird.
#Hier haben wir also in das conf-Ordnerverzeichnis geschrieben
#Wenn Sie Jenkins nicht verwenden müssen, können Sie die folgende Kurzversion verwenden, um den PID-Befehl zu erhalten
#PID=`ps -ef |grep Projektname |grep -v grep | awk '{print $2}'`
#【3.4】 Holen Sie sich die Prozess-ID
PID=`ps -ef |grep /home/tomcat-dev/conf |grep -v grep | awk '{print $2}'`
if [ ! "$PID" ];then # Hier wird ermittelt, ob der TOMCAT-Prozess existiert
echo "Prozess existiert nicht"
anders
echo "Der Prozess existiert und beendet den Prozess PID: $PID"
töten -9 $PID
fi

#【3.5】Starten Sie das Projekt
$STARTTOMCAT
echo "Projekt starten"

Build: Wählen Sie in den Post-Schritten Dateien senden oder Befehle über SSH ausführen. Der folgende Post-Build-Vorgang -> War/Ear in einem Container bereitstellen ist nicht mehr erforderlich:

3. Fallstricke beim Bau

Wenn Sie kein Maven-Projekt erstellt haben, installieren Sie es, indem Sie nach dem Plugin suchen: Maven Integration Plugin

Wenn nach dem Erstellen kein Deploy war/ear in einem Container vorhanden ist, suchen Sie im Plugin und installieren Sie es: Deploy to container Plugin

Der folgende Fehler tritt auf:

[FEHLER] Für diesen Build wurden keine Ziele angegeben. Sie müssen eine gültige Lebenszyklusphase oder ein Ziel im Format <plugin-prefix>:<goal> oder <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal> angeben. Verfügbare Lebenszyklusphasen sind: validieren, initialisieren, Quellen generieren, Quellen verarbeiten, Ressourcen generieren, Ressourcen verarbeiten, kompilieren, Klassen verarbeiten, Testquellen generieren, Testquellen verarbeiten, Testressourcen generieren, Testressourcen verarbeiten, Testkompilieren, Testklassen verarbeiten, testen, Paket vorbereiten, Paket, Vorintegrationstest, Integrationstest, Nachintegrationstest, überprüfen, installieren, bereitstellen, vorreinigen, reinigen, nachreinigen, vor der Site, Site, nach der Site, Site-bereitstellen. -> [Hilfe 1]

Lösung: Fügen Sie dem <build>-Tag in pom.xml <defaultGoal>install</defaultGoal> hinzu

Der folgende Fehler tritt auf: org.codehaus.cargo.container.ContainerException: Fehler beim Bereitstellen oder org.codehaus.cargo.container.ContainerException: Die Eigenschaften [cargo.remote.username] und [cargo.remote.password] sind obligatorisch und müssen in Ihrer Konfiguration definiert werden

Lösung: Fügen Sie <plugins> im <build>-Tag von pom.xml hinzu

<Plugin>
    <groupId>org.codehaus.cargo</groupId>
    <artifactId>cargo-maven2-plugin</artifactId>
    <version>1.4.9</version>
    <Konfiguration>
     <Behälter>
      <!-- Name der Containerversion -->
      <containerId>Tomcat 9.x</containerId>
      <Typ>Fernbedienung</Typ>
     </container>
     <Konfiguration>
      <Typ>Laufzeit</Typ>
      <Eigenschaften>
       <!-- Tomcat-Verwaltungsschnittstelle -->
       <cargo.remote.uri>http://ip:8888/manager/text</cargo.remote.uri>
       <!-- Benutzername und Passwort der Tomcat-Verwaltungsschnittstelle -->
       <cargo.remote.username>Benutzername</cargo.remote.username>
       <cargo.remote.password>Passwort</cargo.remote.password>
      </Eigenschaften>
     </Konfiguration>
    </Konfiguration>
   </plugin>

Das folgende Problem tritt auf: Verursacht durch: org.codehaus.cargo.container.tomcat.internal.TomcatManagerException: Der von Ihnen angegebene Benutzername ist nicht berechtigt, den textbasierten Tomcat Manager zu verwenden
Lösung: Gehen Sie zur Datei /webapps/manager/META_INF/context.xml von Tomcat und kommentieren Sie die eingeschränkten Quelleinstellungen in der Datei aus.

<Kontext antiResourceLocking="falsch" privilegiert="wahr" >
<!--
 <Valve-Klassenname="org.apache.catalina.valves.RemoteAddrValve"
   erlauben="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:0:1" />
--> //Auskommentieren <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Kontext>

Bei der Tomcat-Remoteverbindung wird eine 403-Ablehnung angezeigt. Fügen Sie manager.xml unter conf/Catalina/localhost hinzu.

<?xml version="1.0" encoding="UTF-8"?>
<Kontext privilegiert="wahr" antiResourceLocking="falsch"
   docBase="${catalina.home}/webapps/manager">
    <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />
</Kontext>

Idea wird mit dem Jenkins-Plug-In für Remote-Publishing kombiniert. Wenn Crumb-Daten über http://ip:8080/crumbIssuer/api/xml?tree=crumb# abgerufen und ausgefüllt werden, CSRF aktiviert -> Fehlende oder fehlerhafte Crumb-Daten werden angezeigt

Wenn man online nach Lösungen sucht, wird in den meisten Fällen empfohlen, den CSRF-Dienst zu aktivieren.

Das Problem lässt sich jedoch immer noch nicht lösen. Die Lösung lautet: Klicken Sie auf Benutzername -> Einstellungen -> API-Token -> Aktuelles Token, generieren Sie ein Token anhand des Tokennamens, ersetzen Sie den Benutzernamen und das Passwort oben und es ist schließlich erfolgreich

Dies ist das Ende dieses Artikels über Hot Deployment/Neustart der automatischen Freigabe von Jenkins+Tomcat und Lösungen für aufgetretene Probleme (empfohlen). Weitere relevante Inhalte zum Hot Deployment von Jenkins Tomcat finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • GitLab+Jenkins+Maven+Tomcat realisiert automatische Integration, Verpackung und Bereitstellung
  • So stellen Sie Jenkins unter Tomcat bereit

<<:  So verwenden Sie MySQL-Stresstest-Tools

>>:  Verständnis und Anwendungsszenarien von ES6-Erweiterungsoperatoren

Artikel empfehlen

Einige Hinweise zu MySQL-Routineberechtigungen

1. Wenn der Benutzer über die Berechtigung zum Er...

Detaillierte Erklärung der grundlegenden Interaktion von Javascript

Inhaltsverzeichnis 1. So erhalten Sie Elemente Ho...

MySQL-Datenbankindizes und -Transaktionen

Inhaltsverzeichnis 1. Inhaltsverzeichnis 1.1 Konz...

MySQL 5.6.37 (zip) Download Installationskonfiguration Grafik-Tutorial

In diesem Artikel finden Sie das Download-, Insta...

Connector-Konfiguration in Tomcat

JBoss verwendet Tomcat als Webcontainer. Die Konf...

Praxis der Verwendung von Vite2+Vue3 zum Rendern von Markdown-Dokumenten

Inhaltsverzeichnis Benutzerdefinierte Vite-Plugin...

Nginx implementiert dynamische und statische Trennung Beispielerklärung

Um das Parsen der Website zu beschleunigen, könne...

Detaillierte Erklärung des Vue-Elements plus Mehrsprachenumschaltung

Inhaltsverzeichnis Vorwort Wie wechselt man zwisc...

Eine kurze Diskussion über die Semantik von HTML und einige einfache Optimierungen

1. Was ist Semantisierung? Erklärung zum Bing-Wör...

Grafisches Tutorial zur Installation von MySQL5.7.18 im Windows-System

MySQL-Installationstutorial für Windows-Systeme h...

Detaillierte Erklärung des Rewrite-Moduls von Nginx

Das Umschreibmodul ist das Modul ngx_http_rewrite...

Antworten auf mehrere häufig gestellte MySQL-Interviewfragen

Vorwort: Bei Vorstellungsgesprächen für verschied...