Hallo! Das ist Ishida. Ich erstelle derzeit eine Demo-Umgebung für OpenShift DevOps, aber Java / Maven-Builds sind langsam. .. Insbesondere wenn eine Java-Anwendung in einem OpenShift-Container in Maven erstellt wird, der durch eine Quelländerung ausgelöst wird **, wird der Container bei jeder Erstellung neu erstellt, sodass kein Maven-Cache vorhanden ist. Infolgedessen werden sowohl der erste Build als auch der zweite und die nachfolgenden Builds aus dem Maven-Repository im Internet heruntergeladen, was eine beträchtliche Zeit in Anspruch nimmt. ** ** **
SimpleServlet.java
package my;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class SimpleServlet
*/
@WebServlet("/*")
public class SimpleServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().print("<h1><font color=green>Simple Servlet ran successfully</font></h1>"
+ "Powered by WebSphere Application Server Liberty Profile");
}
}
Da beim Starten des neuen Containers (Pod) kein Cache ($ home / .m2 / repository) vorhanden ist, wird dieser wie folgt endlos von repo.maven.apache.org heruntergeladen.
Beispiel für ein Ausführungsprotokoll
[INFO] ------------------------< SimpleApp:SimpleApp >-------------------------
[INFO] Building SimpleApp 1.0
[INFO] --------------------------------[ war ]---------------------------------
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plugin-2.6.pom
Progress (1): 2.2/8.1 kBProgress (1): 5.0/8.1 kBProgress (1): 7.8/8.1 kBProgress (1): 8.1 kB Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plugin-2.6.pom (8.1 kB at 4.4 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-plugins/23/maven-plugins-23.pom
Progress (1): 2.2/9.2 kBProgress (1): 5.0/9.2 kBProgress (1): 7.8/9.2 kBProgress (1): 9.2 kB Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-plugins/23/maven-plugins-23.pom (9.2 kB at 48 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/22/maven-parent-22.pom
.....
: warning: Nur für den Fall, in diesem Artikel geht es darum, Maven auf OpenShift in der DevOps-Pipeline zu erstellen. Mit anderen Worten, wenn s2i nicht verwendet wird = Maven Build from Source wird außerhalb von OpenShift ausgeführt (= kurz, normale Betriebssystembefehlsumgebung usw.), um eine War / Ear-Datei zu erstellen, und War / Ear wird in OpenShift platziert (kopiert). Wenn Sie dies nur tun, funktioniert der normale Maven-Cache, sodass es kein Problem gibt.
Zunächst wird im Allgemeinen im Normalfall (= nicht in einer Containerumgebung) der Inhalt unter $ home / .m2 / repository zwischengespeichert, wenn der erste MVN-Build ausgeführt wird, und der Cache wird ab dem zweiten Mal referenziert. Die Bauzeit wird reduziert.
Wenn Sie dasselbe durch eine Containerumgebung ersetzen, speichern Sie zuerst .m2 in Sicherungsartefakten mit s2i build
Eine einfachere und flexiblere Möglichkeit ist die Verwendung des von Sonatype unter OSS bereitgestellten Repository-Managers Nexus3. Nexus3 ist ein Repository-Manager und kann für verschiedene Zwecke verwendet werden, z. B. zum Ersetzen der Docker-Registrierung sowie von Maven. Standardmäßig verfügt es jedoch über die Maven-Proxy-Funktion. Da das Container-Image auf Dockerhub veröffentlicht wird, ist es sehr einfach, es unter OpenShift bereitzustellen. Wenn Sie Nexus3 als Referenz-Repository für Java / Maven-Builds auf OpenShift angeben, wird zum ersten Mal über den Nexus3 Maven-Proxy auf das Maven-Repository im Internet zugegriffen, die Ressourcen werden jedoch auf der Nexus3-Seite zwischengespeichert. Daher treffen Maven-Ressourcen im zweiten und den folgenden Builds auf den Nexus 3-Cache, wodurch die Build-Zeit verkürzt wird.
Kurz gesagt, wenn Sie ein MVN-Paket in einem neuen Container (Pod) in OpenShift ausführen
① Standardmäßig erfolgt der Download jedes Mal ② Wenn Nexus3 betrieben wird, wird es zum ersten Mal heruntergeladen, aber zwischengespeichert. ③ Der Cache wird im zweiten und nachfolgenden Build getroffen, wenn Nexus3 ausgeführt wird (daher wird er nicht heruntergeladen).
Das Verfahren zum Einrichten und Verwenden von Nexus 3 ist unten dargestellt.
--OKD 3.11 (unter Ubuntu 18.04), das unter IBM Cloud (IaaS) ausgeführt wird - All-in-One-Konfiguration wurde mit aktivem OC-Cluster gestartet
Das obige Bild wird auf Dockerhub veröffentlicht, sodass Sie es mit dem Befehl oc problemlos für OpenShift bereitstellen können.
Melden Sie sich an und erstellen Sie ein neues Projekt. Stellen Sie dann das Sonatype / Nexus3-Image bereit, um Dienste und Routen zu erstellen.
So stellen Sie nexus3 bereit
oc login -u developer -p dummy
oc new-project nexus3
oc new-app sonatype/nexus3
oc expose svc/nexus3
Es ist in Ordnung, wenn die Route (http://nexus3-nexus3.162.133.79.188.nip.io im obigen Beispiel) im oc-Status erstellt wird.
oc_status
handson01@devops01:~$ oc status
In project nexus3 on server https://162.133.79.188:8443
http://nexus3-nexus3.162.133.79.188.nip.io to pod port 8081-tcp (svc/nexus3)
dc/nexus3 deploys istag/nexus3:latest
deployment #1 deployed 2 minutes ago - 1 pod
2 infos identified, use 'oc status --suggest' to see details.
Pod läuft auf der Verwaltungskonsole, nicht wahr?
Melden Sie sich anschließend als Administrator (Administrator) bei der Nexus 3-Konsole an, um sie einzurichten. Zuvor müssen Sie jedoch das Administratorkennwort abrufen.
Gemäß der Site-Beschreibung von sonatype / nexus3 wird das Passwort in die Datei ** admin.password ** geschrieben.
Notes: Default user is admin and the uniquely generated password can be found in the admin.password file inside the volume. See Persistent Data for information about the volume.
Verwenden Sie das oben beschriebene Verfahren, um den Pod-Namen zu identifizieren, melden Sie sich mit oc rsh beim Pod an und überprüfen Sie dann den Inhalt von ** / nexus-data / admin.password **, um das Passwort zu erhalten. [^ 1]
handson01@devops01:~$ oc get pods
NAME READY STATUS RESTARTS AGE
nexus3-1-45rpz 1/1 Running 0 2m
handson01@devops01:~$ oc rsh nexus3-1-45rpz
sh-4.4$ find / -name admin.password
find: '/var/cache/ldconfig': Permission denied
find: '/var/lib/private': Permission denied
find: '/var/lib/portables': Permission denied
find: '/lost+found': Permission denied
find: '/proc/tty/driver': Permission denied
/nexus-data/admin.password
sh-4.4$ cat /nexus-data/admin.password
6a37dec6-fc57-41c8-87ac-***********sh-4.4$
[^ 1]: admin.password wird anscheinend erst ca. 5-10 Sekunden nach dem Start des Pods generiert. Wenn Sie es also nicht finden können, warten Sie eine Weile und versuchen Sie es erneut.
Gehen Sie zu der im Stammverzeichnis angegebenen URL (z. B. http://nexus3-nexus3.162.133.79.188.nip.io), öffnen Sie die Nexus 3-Administratorkonsole und klicken Sie oben rechts auf "Anmelden"
Geben Sie den Benutzer als Administrator und das zuvor erhaltene Passwort als "Anmelden" ein.
Der Assistent für die Ersteinrichtung wird gestartet. Klicken Sie daher auf "Weiter".
Ändern Sie zunächst das ursprüngliche Passwort und klicken Sie auf "Weiter".
Geben Sie an, ob anonymer Zugriff zugelassen werden soll. Dieses Mal dient es zum Zwischenspeichern des öffentlichen maven2-Repositorys, ist also nicht vertraulich. Aktivieren Sie daher "Anonymen Zugriff aktivieren" und klicken Sie auf "Weiter".
Das ist es.
Rufen Sie die URL des Repositorys ab, die beim Ausführen des Maven-Pakets angegeben werden soll.
Klicken Sie in der Liste der unter "Zahnradmarke (Serververwaltung und -konfiguration)" - "Repository" - "Repositorys" oben in der Konsole angezeigten Repositorys auf ** maven-central **
Der Speicherort der URL ist die URL, auf die in Maven verwiesen werden soll.
Nachdem Nexus 3 einsatzbereit ist, geben Sie die URL an, die beim Erstellen mit Maven auf den Nexus 3 Maven-Proxy (anstelle des Standard-repo.maven.apache.org) als Repository verweist.
Geben Sie insbesondere die Benutzereinstellungsdatei mit -s nexus-settings.xml
[^ 2] an, wenn Sie mit dem mvn-Paket wie unten gezeigt erstellen.
[^ 2]: -s, --settings
Spezifikationsbeispiel in s2i zusammenstellen
mvn package -s nexus-settings.xml
cp -f target/*.war /config/dropins/
Der Inhalt der Benutzereinstellungsdatei lautet wie folgt und die URL wird an drei Stellen neu geschrieben. [^ 3] Für die Beschreibung habe ich auf den Artikel verwiesen: Zeitung: OpenShift Nexus.
[^ 3]: Sie müssen keinen Benutzernamen und kein Kennwort angeben, da Sie den anonymen Zugriff im Nexus 3-Einstellungsassistenten aktiviert haben.
nexus-settings.xml
<settings>
<servers>
<server>
<id>nexus</id>
<!-- username>admin</username -->
<!-- password>password</password -->
</server>
</servers>
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://nexus3-nexus3.162.133.79.188.nip.io/repository/maven-central/</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>nexus</id>
<!--Enable snapshots for the built in central repo to direct -->
<!--all requests to nexus via the mirror -->
<repositories>
<repository>
<id>central</id>
<url>http://nexus3-nexus3.162.133.79.188.nip.io/repository/maven-central/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://nexus3-nexus3.162.133.79.188.nip.io/repository/maven-central/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
</settings>
Wenn Sie den Maven-Build erneut ausführen, nachdem Sie das oben Gesagte angegeben haben, dauert das Herunterladen beim ersten Mal mehr als 60 Sekunden. Nach dem zweiten Mal funktioniert der Cache und der Build ist in etwa 15 Sekunden abgeschlossen!
Sie können sehen, dass sich das Pod-Build-Protokoll auch auf Nexus 3 bezieht. (Herunterladen vom Nexus: ~)
[INFO]
[INFO] ------------------------< SimpleApp:SimpleApp >-------------------------
[INFO] Building SimpleApp 1.0
[INFO] --------------------------------[ war ]---------------------------------
Downloading from nexus: http://nexus3-nexus3.162.133.79.188.nip.io/repository/maven-central/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plugin-2.6.pom
Progress (1): 4.1/8.1 kBProgress (1): 7.7/8.1 kBProgress (1): 8.1 kB Downloaded from nexus: http://nexus3-nexus3.162.133.79.188.nip.io/repository/maven-central/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plugin-2.6.pom (8.1 kB at 43 kB/s)
Downloading from nexus: http://nexus3-nexus3.162.133.79.188.nip.io/repository/maven-central/org/apache/maven/plugins/maven-plugins/23/maven-plugins-23.pom
Progress (1): 4.1/9.2 kBProgress (1): 7.8/9.2 kBProgress (1): 9.2 kB Downloaded from nexus: http://nexus3-nexus3.162.133.79.188.nip.io/repository/maven-central/org/apache/maven/plugins/maven-plugins/23/maven-plugins-23.pom (9.2 kB at 766 kB/s)
...
Der Maven-Proxy von Nexus 3 in einer OpenShift-Umgebung ist sehr einfach bereitzustellen und zu konfigurieren und kann dazu beitragen, die Maven-Erstellungszeit beim Erstellen einer DevOps-Pipeline für Java-Anwendungen zu verkürzen. Bitte versuche. Sie können Nexus 3 auch zum Erstellen einer privaten Docker-Image-Registrierung verwenden. OpenShift wird standardmäßig mit einer eigenen Image-Registrierung geliefert, daher ist dies möglicherweise nicht erforderlich, es ist jedoch eine gute Idee, dies als Alternative zu berücksichtigen. das ist alles.
Recommended Posts