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.
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).
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.
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.
Beachten Sie, dass es schwierig war, Tomcat in der Entwicklungsumgebung zu starten und mit einem Browser zu überprüfen.
Brew Install to Mcat
Wenn Sie Tomcat über IntelliJ IDEA ausführen, werden Sie zu http: // localhost: 8080 / web-sprig-mvc / greeting weitergeleitet und der Bildschirm wird angezeigt.
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.
Unten über die schwierigen Punkte
Die folgenden drei virtuellen Umgebungen wurden auf dem lokalen Computer erstellt.
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.
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.
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
Nehmen Sie Einstellungen vor, um die Spring Boot-Anwendung auszuführen.
Zum Zeitpunkt der Erstellung ist die JAR-Datei noch nicht vorhanden. Selbst wenn Sie den Dienst starten, lautet der Status "Fehlgeschlagen".
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.
Führen Sie danach die Ersteinrichtung auf dem Bildschirm durch und legen Sie den Pfad des installierten JDK und Git fest.
Tomcat
Sie können auf die Tomcat-Konsole zugreifen, indem Sie http://192.168.33.30:8080/ besuchen.
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.
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.)
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 **
# vi / etc / ssh / sshd_config
und schalten Sie" Password Authentication "auf yes# systemctl restart sshd
neu.# 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.
** 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.