Automatische Bereitstellung von in Java entwickelten Webanwendungen mit Jenkins [Vorbereitung]

Um CI / CD zu üben, habe ich Jenkins so eingerichtet, dass Artefakte generiert und auf dem Anwendungsserver bereitgestellt werden.

In diesem Artikel werden wir als * Vorbereitung * das in Java auf Github geschriebene Webanwendungsprojekt verwalten und es in Zusammenarbeit mit Jenkins einrichten.

Artifacts

Ich denke, es gibt im Allgemeinen zwei Möglichkeiten für die Bereitstellung: "Bereitstellung mit Krieg" und "Bereitstellung mit JAR". Daher habe ich mich für eines der beiden Muster entschieden.

Das ist, ** 1. Geben Sie die War-Datei aus und stellen Sie sie auf dem Anwendungsserver bereit. ** **. ** 2. Geben Sie die JAR-Datei aus und führen Sie sie mit dem Befehl java aus. ** **. Diesmal verwendet der erstere Tomcat als Anwendungsserver, und der letztere verwendet den in Spring Boot integrierten Tomcat, um das JAR auszuführen.

Umgebung

Erstellen eines Java-Projekts

Um zwei Arten von Artefakten vorzubereiten, eine Kriegsdatei und eine JAR-Datei, haben wir zwei Java-Webanwendungsprojekte vorbereitet, die das Spring Framework verwenden.

Klicken Sie hier für das Github-Repository (https://github.com/kazokmr/JavaWebAppDeploySample).

Muster 1: Projekt zur Ausgabe der Kriegsdatei

Erstellen Sie eine Webanwendung mit Spring MVC

Die Basis basiert auf Bereitstellen von Webinhalten mit Spring MVC auf Spring's HP. Ich habe versucht, ein Maven-Projekt vorzubereiten, aber Spring Boot Ich habe es benutzt und die Verpackung war auch ein Glas, also habe ich es vor [gründliche Einführung im Frühjahr] gekauft (https://www.amazon.co.jp/dp/B01IEWNLBU/ref=cm_sw_em_r_mt_dp_U_YXQrCb5C6MTSR) und Mr. Tada hat es bei JJUG CCC gemacht. Ich habe auch auf das praktische Material [Spring 5 & Spring Boot 2 - Vorbereitungsverfahren zum Anfassen] verwiesen (https://qiita.com/suke_masa/items/44463518fdbbc13e0087).

Überprüfen Sie, ob die Kriegsdatei unter [Datei> Projektstruktur> Artefakte] von IntelliJ IDEA registriert ist, und fügen Sie sie hinzu, wenn sie nicht vorhanden ist.

Maven Wrapper erstellen

Wir haben Maven Wrapper so vorbereitet, dass Sie mvn-Befehle ausführen können, ohne Maven auf dem Jenkins-Server zu installieren. mvn -N io.takari:maven:wrapper -Dmaven=3.6.0 Informationen zum Erstellen von Maven Wrapper (mvnw) finden Sie unter hier.

Starten Sie Tomcat von IntelliJ IDEA auf dem Entwicklungscomputer

Beachten Sie, dass es schwierig war, Tomcat in der Entwicklungsumgebung zu starten und mit einem Browser zu überprüfen.

  1. Zuerst hatte ich Tomcat nicht auf meinem Entwicklungs-PC installiert, also habe ich es mit Homebrew installiert. Brew Install to Mcat
  2. Geben Sie unter [Ausführen> Konfigurationen bearbeiten> Neue Konfiguration hinzufügen] von IntelliJ IDEA [Tomcat Server> lokal] an, um den Einstellungsbildschirm anzuzeigen.
  3. Geben Sie "/ usr / local / Cellar / tomcat / 9.0.14 / libexec" für den Pfad von [Application Server] an.
  4. Geben Sie für [URL] "http: // localhost: 8080 / web-spring-mvc / greeting" ein.
  5. Fügen Sie "Krieg erweitert" aus dem Krieg hinzu, der unter "Beim Serverstart bereitstellen" auf der Registerkarte "Bereitstellung" als "Artefakte" angegeben werden kann.
  6. Geben Sie auf der Registerkarte Bereitstellung unter Anwendungskontext "/ web-spring-mvc" an. (Übereinstimmung mit ContextPath von URL 4)

Wenn Sie Tomcat über IntelliJ IDEA ausführen, werden Sie zu http: // localhost: 8080 / web-sprig-mvc / greeting weitergeleitet und der Bildschirm wird angezeigt.

Muster 2: Projekt zur Ausgabe der JAR-Datei

Führen Sie die von der Spring Boot-Anwendung entwickelten Artefakte aus und geben Sie sie mit dem Befehl java vom jar aus. Das Beispielprojekt erstellt ein Maven-Projekt basierend auf Erstellen einer Anwendung mit Spring Boot. Da die Ausgabe dieses Beispiels Rest API war, habe ich es so bearbeitet, dass es HTML (Thymeleaf) ausgibt.

Erstellen Sie zunächst ein Projekt mit Spring Initializer.

Maven-Abhängigkeitseinstellungen

Unten über die schwierigen Punkte

Server erstellen

Die folgenden drei virtuellen Umgebungen wurden auf dem lokalen Computer erstellt.

  1. Jenkins Server
  2. Anwendungsserver (Tomcat)
  3. Anwendungsserver (nur Java)

Starten Sie zum Erstellen mehrere Umgebungen gleichzeitig mit Vagrant und [ansible-playbook](https://github.com/kazokmr/ansible-java- Die erforderliche Software wird mit deploy-env installiert.

Erstellen Sie einen Jenkins-Server

Hauptinstallationssoftware

JRE 8 wird als Ausführungsumgebung für den Jenkins-Betrieb verwendet, und OpenJDK 11 wird zum Erstellen von Anwendungen verwendet.

Informationen zum Installieren von Jenkins finden Sie im Jenkins-Wiki.

Erstellen Sie einen Tomcat-Server

Hauptinstallationssoftware

Für das Schreiben eines Ansible-Playbooks habe ich auf [Beispiel einer Ansible-Head-Familie] verwiesen (https://github.com/ansible/ansible-examples/tree/master/tomcat-standalone).

Ich bin auf die Firewall-Einstellungen gestoßen, konnte jedoch eine Verbindung herstellen, indem ich "den Start des Tomcat-Dienstes von gestartet auf neu gestartet änderte" und "Firewall vor dem Festlegen des Firewall-Ports starten".

/roles/tomcat/tasks/main.yml(Auszug)


- name: Start Tomcat
  service: name=tomcat state=restarted enabled=yes

- name: running firewall daemon
  service: name=firewalld state=restarted

Beim Zugriff auf den Tomcat-Manager-Bildschirm (/ manager / html) von einem lokalen PC aus wird "403-Zugriff verweigert" angezeigt, sodass ein Fehlerbildschirm oder hier angezeigt wird. Als ich mir 30/000000) ansah, wurde gesagt, dass der Anfangswert so eingestellt wurde, dass der Zugriff auf den Manager-Bildschirm nur von dem Computer aus möglich war, auf dem Tomcat installiert war, also / webapps / manager / META-INF / context. Ich habe die XML bearbeitet und so geändert, dass über das Netzwerk der virtuellen Umgebung (192.168.33.0/24) darauf zugegriffen werden kann.

Um den Tomcat-Manager über Befehle ausführen zu können, weisen Sie dem Ausführungsbenutzer in tomcat-users.xml die Rolle manager-sciprt zu. Referenz

Erstellen Sie einen JVM-Server

Nehmen Sie Einstellungen vor, um die Spring Boot-Anwendung auszuführen.

  1. Installieren Sie OpenJDK 11, damit Java-Befehle ausgeführt werden können
  2. Erstellen Sie einen JVM-Benutzer, um die Anwendung auszuführen.
  3. Erstellen Sie einen Dienst, der die Spring Boot-Anwendung ausführt.

Zum Zeitpunkt der Erstellung ist die JAR-Datei noch nicht vorhanden. Selbst wenn Sie den Dienst starten, lautet der Status "Fehlgeschlagen".

Starten Sie Vagrant

Wenn Sie "vagrant up" ausführen, werden die drei Umgebungen der Reihe nach gestartet und Ansible wird ausgeführt, um die erforderliche Software und Einstellungen zu installieren. Nach Abschluss der Installation können Sie mit "vagrant ssh [Hostname]" auf die virtuelle Umgebung zugreifen.

Jenkins

Sie können sich bei Jenkins unter http://192.168.33.10:8080/ anmelden. image.png

Führen Sie danach die Ersteinrichtung auf dem Bildschirm durch und legen Sie den Pfad des installierten JDK und Git fest. image.png

Tomcat

Sie können auf die Tomcat-Konsole zugreifen, indem Sie http://192.168.33.30:8080/ besuchen. image.png

Der Verwaltungsbildschirm und das Skript können mithilfe der Benutzer der im Beispiel enthaltenen Rollen / tomcat / vars / main.yml verwendet werden.

JVM

Bestätigen Sie, dass ** open jdk version ** angezeigt wird, wenn Sie mit vagrant ssh jvm zugreifen und java -version ausführen. image.png

Wenn Sie "# systemctl status app" ausführen, können Sie auch den Ausführungsstatus des Spring Boot-Anwendungsdienstes überprüfen. Beim ersten Mal wird jedoch eine Fehlermeldung angezeigt, da keine JAR-Datei vorhanden ist. (Sie können es sehen, indem Sie auf / var / log / message schauen.)

Einstellungen für den SSH-Zugriff auf den JVM-Server

Es verwendet eine SSH-Verbindung, um die JAR-Datei vom Jenkins-Server auf den JVM-Server zu übertragen und die Dienste der Anwendung auszuführen. In diesem Beispiel habe ich keinen öffentlichen Schlüssel im Voraus erstellt, da ich mehrere Umgebungen gleichzeitig mit vagrant gestartet habe. Daher habe ich den Schlüssel mit dem folgenden Befehl übergeben. (Eigentlich ist es besser, den öffentlichen Schlüssel im Voraus vorzubereiten und beim autorisierten_key-Modul von ansible zu registrieren.)

** Aktivieren Sie vorübergehend den Zugriff mit Kennwortauthentifizierung auf dem JVM-Server **

  1. Öffnen Sie # vi / etc / ssh / sshd_config und schalten Sie" Password Authentication "auf yes
  2. Starten Sie ssh mit # systemctl restart sshd neu.
  3. Registrieren Sie das Passwort des jvm-Benutzers mit # passwd jvm

** Erstellen Sie einen SSH-Schlüssel als Jenkins-Benutzer auf dem Jenkins-Server und senden Sie den öffentlichen Schlüssel an den JVM-Server ** Führen Sie "$ sudo su -s / bin / bash jenkins" aus, um den Befehl als Jenkins-Benutzer auszuführen. Führen Sie daher den Befehl aus, um einen SSH-Schlüssel zu erstellen.

1.jenkins Benutzerverzeichnis[/var/lib/jenkins]Ziehen nach
$ cd ~

2.Machen Sie einen SSH-Schlüssel
$ ssh-keygen -b 2048 -t rsa -f /var/lib/jenkins/.ssh/id_rsa -N ""

3.Senden Sie den öffentlichen Schlüssel an den JVM-Server(Beim Senden werden Sie nach dem Passwort des JVM-Benutzers gefragt)
$ ssh-copy-id -i .ssh/id_rsa.pub [email protected]

4.Verbindungstest
$ ssh -i .ssh/id_rsa [email protected]

5.Ende
$ exit

** Vergessen Sie nicht, die JVM-Serverkennwortauthentifizierung zu deaktivieren, sobald Sie SSH-Zugriff haben ** Das Ausgangsverzeichnis des auf dem JVM-Server erstellten JVM-Benutzers lautet übrigens "/ var / jvm", sodass die SSH-Verbindungsinformationen in "/ var / jvm / .ssh" gespeichert sind.

Sie können in Jenkins erstellen und bereitstellen.

** Maven-Projekt (Java + Spring) ** und ** Jenkins-Server ** und ** Bereitstellungsumgebung **, die von Github verwaltet werden, sind fertig! Die Einstellungsmethode zum Ausführen des Builds und der Bereitstellung danach ist Tomcat-Anwendung und SpringBoot-Anwendung. ), Also bitte hier nachlesen.

Recommended Posts

Automatische Bereitstellung von in Java entwickelten Webanwendungen mit Jenkins [Vorbereitung]
Automatische Bereitstellung von in Java entwickelten Webanwendungen mit Jenkins [Spring Boot App Edition]
Automatische Bereitstellung von in Java entwickelten Webanwendungen mit Jenkins [Tomcat App Edition]
[AWS] So stellen Sie eine mit Rails 6 erstellte Webanwendung mithilfe von CircleCI (1) -Vorbereitung automatisch für ECR / ECS bereit [Containerbereitstellung]
Versuchen Sie es mit dem Java Framework Nablarch [Web Application]
Stellen Sie eine Java-Web-App für Heroku bereit
Rolle von JSP in Webanwendungen [Java]
Java-Anfänger haben versucht, mit Spring Boot eine einfache Webanwendung zu erstellen
[Java] Stellen Sie eine mit Eclipse + Maven + Ontology mit Heroku erstellte Webanwendung bereit
Ich habe versucht, mit AI "A3RT" eine Talk-App in Java zu erstellen.
So zeigen Sie eine Webseite in Java an
Lassen Sie uns mit Java ein supereinfaches Webframework erstellen
Stellen Sie in der IntelliJ IDEA-Umgebung entwickelte Java-Anwendungen für Alibaba Cloud ECS-Instanzen bereit
[Für Anfänger] Bis zum Erstellen einer Webanwendungsentwicklungsumgebung mit Java unter Mac OS
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
Erstellen Sie eine JAVA WEB App und probieren Sie OMC APM aus
Stellen Sie lokal entwickelte Java-Anwendungen mit Cloud Toolkit auf Alibaba Cloud ECS-Instanzen bereit
Erstellen wir eine Taschenrechner-App mit Java ~ Zeigen Sie das Anwendungsfenster an
Erstellung einer Webanwendungsentwicklungsumgebung in Java (für unerfahrene Personen)
So stellen Sie eine Java-Anwendung in Alibaba Cloud EDAS in Eclipse bereit
Socket-Kommunikation mit einem Webbrowser über Java und JavaScript ②
Ich habe versucht, eine Webanwendung voller Fehler mit Kotlin zu implementieren
Socket-Kommunikation mit einem Webbrowser über Java und JavaScript ①
Erstellen eines MOB mit dem Minecraft Java Mythicmobs-Plug-In | Vorbereitung 1
Versuchen Sie es mit RocksDB mit Java
Suchen Sie eine Teilmenge in Java
Machen Sie einen Diamanten mit Java
AWS Elastic Beanstalk # 1 mit Java von Grund auf neu Erstellen einer Java-Webanwendungsumgebung mit EB CLI-
Lassen Sie uns eine TODO-App in Java 4 erstellen. Implementierung der Buchungsfunktion
Sammeln von Clientinformationen, wenn in einer Webanwendung ein Fehler auftritt
Lassen Sie uns eine TODO-App in Java 6 erstellen. Implementierung der Suchfunktion
Lassen Sie uns eine TODO-App in Java 8 erstellen. Implementierung von Bearbeitungsfunktionen
So bedienen Sie automatisch einen in Java unter Windows erstellten Bildschirm
Erstellen wir eine TODO-Anwendung mit Java 1 Kurze Erläuterung von MVC
Lassen Sie uns eine TODO-App in Java 5 erstellen. Schalten Sie die Anzeige von TODO um
3 Implementieren Sie einen einfachen Interpreter in Java
Ich habe ein PDF mit Java erstellt.
Führen Sie Java-Anwendungen in Azure Batch aus
Verschlüsselung mit RSA-Verschlüsselung in Java
Laden Sie Dateien mit Java HttpURLConnection hoch
Greifen Sie über eine Java-Anwendung auf Teradata zu
Erstellen Sie ein Java-Projekt mit Eclipse
Ein einfaches Beispiel für Rückrufe in Java
Verwenden von Java mit AWS Lambda-Eclipse-Vorbereitung
HTTPS-Verbindung mit tls1.2 in Java 6
Ich habe versucht, JWT in Java zu verwenden
Bleiben Sie in einem Java Primer stecken
Webanwendungsstruktur nach Java und Verarbeitungsablauf in der Präsentationsschicht
Stellen Sie mit Ansible und Jenkins ein Image bereit, das aus Tomcat, Java und MySQL besteht
Erstellen eines Projekts (und eines GitHub-Repositorys) mit Java und Gradle mit IntelliJ IDEA
Erstellen einer Entwicklungsumgebung für Java-Webanwendungen mit Docker für Mac Teil1
Umfang des Versuchs, eine Java-Webanwendung unter Windows Server 2016 zu erstellen
So migrieren Sie eine in einer lokalen Docker-Umgebung erstellte Webanwendung nach AWS
Die Geschichte, dass das Servlet nicht in die Java-Webanwendung geladen werden konnte
Bereitstellen einer Node.js-Anwendung auf einer ECS-Instanz mithilfe des Cloud Toolkit
Erstellen Sie mit Docker für Mac Teil2 eine Entwicklungsumgebung für Java-Webanwendungen