salut! C'est Ishida. Je crée actuellement un environnement de démonstration pour OpenShift DevOps, mais les versions Java / Maven sont lentes. .. Plus précisément, lorsqu'une application Java est construite par Maven avec un conteneur sur OpenShift déclenché par un changement de source **, le conteneur est nouvellement créé à chaque fois qu'il est construit, il n'y a donc pas de cache Maven. En conséquence, la première version et la deuxième version et les versions suivantes seront téléchargées à partir du référentiel Maven sur Internet, ce qui prendra un temps considérable. ** **
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");
}
}
Puisqu'il n'y a pas de cache ($ home / .m2 / repository) lorsque le nouveau conteneur (Pod) est démarré, il est téléchargé à l'infini depuis repo.maven.apache.org comme suit.
Exemple de journal d'exécution
[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
.....
: avertissement: Juste au cas où, cet article concerne ** la construction de Maven sur OpenShift ** dans le pipeline DevOps **. En d'autres termes, lorsque s2i n'est pas utilisé = la construction Maven à partir des sources est exécutée en dehors d'OpenShift (= en bref, l'environnement de commande normal du système d'exploitation, etc.) pour créer un fichier war / ear, et war / ear est placé (copie) dans OpenShift. Si vous faites juste), le cache Maven normal fonctionnera, donc il n'y a pas de problème.
Tout d'abord, en termes généraux, dans le cas normal (= pas dans un environnement conteneur), le contenu est mis en cache sous $ home / .m2 / repository lorsque la première build mvn est exécutée, et le cache est référencé à partir de la deuxième fois. Le temps de construction est réduit.
Si vous remplacez la même chose par un environnement de conteneur, enregistrez d'abord .m2 dans save-artifacts en utilisant s2i build
Un moyen plus simple et plus flexible consiste à utiliser le gestionnaire de référentiel Nexus3 fourni par Sonatype sur OSS. Nexus3 est un gestionnaire de référentiel et peut être utilisé à diverses fins telles que le remplacement du registre Docker ainsi que Maven, mais par défaut, il a la fonction de proxy Maven. Étant donné que l'image du conteneur est publiée sur Dockerhub, il est très facile de la déployer sur OpenShift. Si vous spécifiez Nexus3 comme référentiel de référence lors de la création de Java / Maven sur OpenShift, le référentiel Maven sur Internet sera accessible pour la première fois via le proxy Maven de Nexus3, mais les ressources seront mises en cache du côté Nexus3. Par conséquent, dans la deuxième génération et les versions suivantes, les ressources Maven atteindront le cache du Nexus 3, réduisant le temps de construction.
En bref, lors de l'exécution du package mvn dans un nouveau conteneur (Pod) dans OpenShift
① Par défaut, le téléchargement a lieu à chaque fois ② Lorsque Nexus3 est utilisé, il sera téléchargé pour la première fois, mais il sera mis en cache. ③ Le cache sera atteint dans la deuxième version et les versions suivantes lorsque Nexus3 est en cours d'exécution (il ne sera donc pas téléchargé).
La procédure de configuration et d'utilisation du Nexus 3 est indiquée ci-dessous.
--OKD 3.11 (sur ubuntu 18.04) s'exécutant sur IBM Cloud (IaaS) - configuration tout-en-un démarrée avec oc cluster up
L'image ci-dessus est publiée sur Dockerhub, vous pouvez donc la déployer facilement sur OpenShift avec la commande oc.
Connectez-vous et créez un nouveau projet, puis déployez l'image sonatype / nexus3 pour créer des services et des itinéraires.
Comment déployer nexus3
oc login -u developer -p dummy
oc new-project nexus3
oc new-app sonatype/nexus3
oc expose svc/nexus3
Ce n'est pas grave si la route (http://nexus3-nexus3.162.133.79.188.nip.io dans l'exemple ci-dessus) est créée dans l'état oc.
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.
Le pod fonctionne sur la console de gestion, n'est-ce pas?
Ensuite, connectez-vous à la console Nexus 3 en tant qu'administrateur (admin) pour la configuration, mais avant cela, vous devez obtenir le mot de passe administrateur.
Selon la description du site de sonatype / nexus3, le mot de passe est écrit dans le fichier ** admin.password **.
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.
Utilisez les étapes ci-dessus pour identifier le nom du pod, connectez-vous au pod avec oc rsh, puis envoyez le contenu de ** / nexus-data / admin.password ** pour obtenir le mot de passe. [^ 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 ne semble pas être généré avant environ 5 à 10 secondes après le démarrage du pod, donc si vous ne le trouvez pas, veuillez patienter quelques instants et réessayer.
Accédez à l'URL affichée à la racine (par exemple http://nexus3-nexus3.162.133.79.188.nip.io), ouvrez la console d'administration du Nexus 3 et cliquez sur «Se connecter» en haut à droite
Entrez l'utilisateur en tant qu'administrateur et le mot de passe que vous avez obtenu précédemment en tant que «Connexion»
L'assistant de configuration initiale démarre, cliquez donc sur "Suivant".
Tout d'abord, changez le mot de passe initial et cliquez sur "Suivant"
Spécifiez s'il faut autoriser l'accès anonyme. Cette fois, le but est de mettre en cache le référentiel public maven2, donc ce n'est pas confidentiel, donc cochez "Activer l'accès anonyme" et cliquez sur "Suivant"
C'est tout.
Obtenez l'URL du référentiel à spécifier lors de l'exécution du package maven.
Cliquez sur ** maven-central ** dans la liste des référentiels affichés dans "Gear mark (Server Administration and Configulation)" - "Repository" - "Repositories" en haut de la console.
La partie de l'URL est l'URL qui doit être référencée dans Maven.
Maintenant que Nexus 3 est prêt à être utilisé, spécifiez l'URL pour faire référence au proxy Nexus 3 Maven (au lieu du repo.maven.apache.org par défaut) comme référentiel lors de la construction avec Maven.
Spécifiquement, spécifiez le fichier de configuration utilisateur avec -s nexus-settings.xml
[^ 2] lors de la construction avec le package mvn comme indiqué ci-dessous.
[^ 2]: -s, --settings
assembler un exemple de spécification dans s2i
mvn package -s nexus-settings.xml
cp -f target/*.war /config/dropins/
Le contenu du fichier de paramètres utilisateur est le suivant et l'URL est réécrite à 3 endroits. [^ 3] Pour la description, je me suis référé à l'article: journal: OpenShift Nexus.
[^ 3]: vous n'avez pas besoin de spécifier le nom d'utilisateur et le mot de passe, car vous avez activé l'accès anonyme dans l'assistant de configuration du Nexus 3.
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>
Si vous exécutez à nouveau la compilation Maven après avoir spécifié ce qui précède, il faudra plus de 60 secondes pour télécharger la première fois, mais après la deuxième fois, le cache fonctionnera et la construction sera terminée dans environ 15 secondes!
Vous pouvez voir que le journal de construction du pod fait également référence à Nexus 3. (Téléchargement depuis 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)
...
Le proxy Maven de Nexus 3 dans un environnement OpenShift est très facile à déployer et à configurer, et peut aider à réduire le temps de construction de Maven lors de la création d'un pipeline DevOps pour les applications Java. S'il vous plaît essayez. Vous pouvez également utiliser Nexus 3 pour créer un registre d'images Docker privé. OpenShift est livré en standard avec son propre registre d'images, donc cela peut ne pas être nécessaire, mais cela peut être une bonne idée de garder à l'esprit comme alternative. c'est tout.
Recommended Posts