Déployer automatiquement des applications Web développées en Java à l’aide de Jenkins [Préparation]

Afin de pratiquer CI / CD, j'ai configuré Jenkins pour générer des artefacts et les déployer sur le serveur d'applications.

Dans cet article, en tant que * préparation *, nous allons gérer le projet d'application Web écrit en Java sur Github et le configurer pour le construire en coopération avec Jenkins.

Artifacts

Je pense qu'il y a généralement deux manières de déployer, «déployer avec la guerre» et «déployer avec jar», j'ai donc décidé d'essayer l'un ou l'autre modèle.

C'est, ** 1. Sortez le fichier war et déployez-le sur le serveur d'applications. ** ** ** 2. Sortez le fichier jar et exécutez-le avec la commande java. ** ** Cette fois, le premier utilise Tomcat comme serveur d'applications, et le second utilise le Tomcat intégré dans Spring Boot pour exécuter le fichier jar.

environnement

Créer un projet Java

Afin de préparer deux types d'artefacts, un fichier war et un fichier jar, nous avons préparé deux projets d'application Web Java utilisant Spring Framework.

Cliquez ici pour le référentiel Github (https://github.com/kazokmr/JavaWebAppDeploySample)

Motif 1: projeter pour générer un fichier war

Créer une application Web à l'aide de Spring MVC

La base est basée sur Serving Web Content with Spring MVC sur Spring HP, j'ai essayé de préparer un projet Maven, mais Spring Boot Je l'ai utilisé et l'emballage était également en pot, alors je l'ai acheté avant Spring deep introduction et M. Tada l'a fait au JJUG CCC. J'ai également fait référence au matériel pratique procédure de préparation pratique de Spring 5 et Spring Boot 2.

Vérifiez que le fichier war est enregistré dans [Fichier> Structure du projet> Artefacts] d'IntelliJ IDEA, et ajoutez-le s'il n'existe pas.

Création de Maven Wrapper

J'ai préparé Maven Wrapper pour que je puisse exécuter les commandes mvn sans installer Maven sur le serveur Jenkins. mvn -N io.takari:maven:wrapper -Dmaven=3.6.0 Pour savoir comment créer Maven Wrapper (mvnw), reportez-vous à here.

Démarrez Tomcat depuis IntelliJ IDEA sur la machine de développement

Notez qu'il était difficile de lancer Tomcat dans l'environnement de développement et de le vérifier avec un navigateur.

  1. Premièrement, je n'avais pas installé Tomcat sur mon PC de développement, je l'ai donc installé avec homebrew. brew install sur mcat
  2. Spécifiez [Serveur Tomcat> local] dans [Exécuter> Modifier les configurations> Ajouter une nouvelle configuration] d'IntelliJ IDEA pour afficher l'écran de configuration.
  3. Spécifiez / usr / local / Cellar / tomcat / 9.0.14 / libexec pour le chemin du [Serveur d'applications].
  4. Entrez http: // localhost: 8080 / web-spring-mvc / salutation pour [URL].
  5. Ajoutez war extended à partir de la guerre qui peut être spécifiée comme artefacts dans [Déployer au démarrage du serveur] sur l'onglet Déploiement.
  6. Dans l'onglet Déploiement, sous Contexte d'application, spécifiez / web-spring-mvc. (Correspondance avec ContextPath de l'URL 4)

Lorsque vous exécutez Tomcat depuis IntelliJ IDEA, vous serez redirigé vers http: // localhost: 8080 / web-sprig-mvc / salutation et l'écran s'affichera.

Modèle 2: projeter vers le fichier jar de sortie

Exécutez les artefacts développés par l'application Spring Boot et sortez par le jar avec la commande java. L'exemple de projet crée un projet Maven basé sur Construction d'une application avec Spring Boot. Étant donné que la sortie de cet exemple était l'API Rest, je l'ai modifiée pour générer une sortie html (Thymeleaf).

Tout d'abord, créez un projet à l'aide de Spring Initializer.

Paramètres de dépendance Maven

Ci-dessous, sur les points difficiles

--Si vous n'ajoutez pas spring-boot-starter-thymeleaf, l'écran ne sera pas affiché car Thymeleaf ne peut pas être utilisé.

Créer un serveur

Les trois environnements virtuels suivants ont été créés sur la machine locale.

  1. Serveur Jenkins
  2. Serveur d'applications (Tomcat)
  3. Serveur d'applications (Java uniquement)

Pour construire, démarrez plusieurs environnements en même temps avec Vagrant et [ansible-playbook](https://github.com/kazokmr/ansible-java- Le logiciel nécessaire est installé à l'aide de deploy-env).

Construire un serveur Jenkins

Logiciel d'installation principal

JRE 8 est utilisé comme environnement d'exécution pour les opérations Jenkins et OpenJDK 11 est utilisé pour créer des applications.

Pour installer Jenkins, reportez-vous au Jenkins Wiki.

Construire un serveur Tomcat

Logiciel d'installation principal

Pour savoir comment écrire Ansible-playbook, je me suis référé à sample of ansible head family.

Je suis tombé sur les paramètres du pare-feu, mais j'ai pu me connecter en "changeant le démarrage du service Tomcat de démarré à redémarré" et en "démarrant firewalld avant de spécifier le port firewalld".

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


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

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

Lors de l'accès à l'écran du gestionnaire Tomcat (/ manager / html) à partir d'un PC local, «403 accès refusé» s'affiche, donc un écran d'erreur ou ici Quand j'ai regardé 30/000000), il a été dit que la valeur initiale était définie de sorte que l'accès à l'écran du gestionnaire ne puisse être fait qu'à partir de la machine sur laquelle Tomcat était installé, donc / webapps / manager / META-INF / context. J'ai édité le xml et l'ai changé pour qu'il soit accessible depuis le réseau de l'environnement virtuel (192.168.33.0/24).

Aussi, afin de pouvoir exécuter le gestionnaire tomcat à partir de commandes, attribuez le rôle manager-sciprt à l'utilisateur d'exécution dans tomcat-users.xml. Référence

Construire un serveur JVM

Définissez les paramètres pour exécuter l'application Spring Boot.

  1. Installez OpenJDK 11 pour que les commandes java puissent être exécutées
  2. Créez un utilisateur jvm pour exécuter l'application.
  3. Créez un service qui exécute l'application Spring Boot.

Au moment de la création, le fichier jar n'existe pas encore, donc même si vous démarrez le service, le statut sera Échec.

Lancez Vagrant

Lorsque vous exécutez vagrant up, les trois environnements seront démarrés dans l'ordre, et Ansible sera exécuté pour installer le logiciel et les paramètres nécessaires. Une fois l'installation terminée, vous pouvez accéder à l'environnement virtuel avec vagrant ssh [nom d'hôte].

Jenkins

Vous pouvez vous connecter à Jenkins en visitant http://192.168.33.10:8080/. image.png

Après cela, effectuez la configuration initiale à partir de l'écran et définissez le chemin du JDK et de Git installés. image.png

Tomcat

Vous pouvez accéder à la console Tomcat en visitant http://192.168.33.30:8080/. image.png

L'écran de gestion et le script peuvent être utilisés en utilisant les utilisateurs de roles / tomcat / vars / main.yml inclus dans l'exemple.

JVM

Confirmez que ** open jdk version ** est affiché lors de l'accès avec vagrant ssh jvm et de l'exécution de java -version. image.png

De plus, si vous exécutez # systemctl status app, vous pouvez vérifier l'état d'exécution du service d'application Spring Boot, mais la première fois, vous obtiendrez une erreur car il n'y a pas de fichier jar. (Vous pouvez le voir en regardant / var / log / message.)

Paramètres d'accès SSH au serveur JVM

Il utilise une connexion SSH pour transférer le fichier jar du serveur Jenkins vers le serveur JVM et exécuter les services de l'application. Dans cet exemple, je n'ai pas créé de clé publique à l'avance car j'ai démarré plusieurs environnements en même temps avec vagrant, j'ai donc passé la clé avec la commande suivante. (En fait, il est préférable de préparer la clé publique à l'avance et de l'enregistrer avec le module allowed_key d'ansible.)

** Activez temporairement l'accès avec authentification par mot de passe sur le serveur JVM **

  1. Ouvrez # vi / etc / ssh / sshd_config et réglez" Authentification par mot de passe "sur oui
  2. Redémarrez ssh avec # systemctl restart sshd.
  3. Enregistrez le mot de passe de l'utilisateur jvm avec # passwd jvm

** Créez une clé SSH en tant qu'utilisateur Jenkins sur le serveur Jenkins et envoyez la clé publique au serveur JVM ** Exécutez $ sudo su -s / bin / bash jenkins pour exécuter la commande en tant qu'utilisateur Jenkins, alors exécutez la commande pour créer une clé SSH.

1.répertoire de base de l'utilisateur jenkins[/var/lib/jenkins]Déménager à
$ cd ~

2.Créer une clé ssh
$ ssh-keygen -b 2048 -t rsa -f /var/lib/jenkins/.ssh/id_rsa -N ""

3.Envoyez la clé publique au serveur JVM(Le mot de passe de l'utilisateur jvm vous sera demandé lors de l'envoi)
$ ssh-copy-id -i .ssh/id_rsa.pub [email protected]

4.Test de connexion
$ ssh -i .ssh/id_rsa [email protected]

5.Fin
$ exit

** N'oubliez pas de désactiver l'authentification par mot de passe du serveur JVM une fois que vous avez un accès ssh ** Au fait, le répertoire personnel de l'utilisateur jvm créé sur le serveur JVM est / var / jvm, donc les informations de connexion SSH sont stockées dans / var / jvm / .ssh.

Vous êtes prêt à créer et à déployer dans Jenkins.

** Le projet Maven (Java + Spring) ** et le ** serveur Jenkins ** et ** l'environnement de déploiement ** gérés par Github sont prêts! Les paramètres pour les versions et les déploiements ultérieurs sont Tomcat Application et Spring Boot Application. ), Veuillez donc vous référer ici.

Recommended Posts

Déployer automatiquement des applications Web développées en Java à l’aide de Jenkins [Préparation]
Déployer automatiquement des applications Web développées en Java à l'aide de Jenkins [Spring Boot App Edition]
Déployer automatiquement des applications Web développées en Java à l'aide de Jenkins [Tomcat App Edition]
[AWS] Comment déployer automatiquement une application Web créée avec Rails 6 sur ECR / ECS à l'aide de CircleCI (1) Préparation [Déploiement de conteneur]
Essayez d'utiliser le framework Java Nablarch [Application Web]
Déployer des applications Web Java sur Heroku
Rôle de JSP dans les applications Web [Java]
Un débutant Java a essayé de créer une application Web simple à l'aide de Spring Boot
[Java] Déployer une application Web créée avec Eclipse + Maven + Ontology avec Heroku
J'ai essayé de créer une application de conversation en Java à l'aide de l'IA «A3RT»
Comment afficher une page Web en Java
Créons un framework Web ultra-simple avec Java
Déployez des applications Java développées dans l'environnement IntelliJ IDEA sur des instances Alibaba Cloud ECS
[Pour les débutants] Jusqu'à la création d'un environnement de développement d'applications Web utilisant Java sur Mac OS
Comment convertir A en A et A en A en utilisant le produit logique et la somme en Java
Créez une application JAVA WEB et essayez OMC APM
Déployez des applications Java développées localement avec Cloud Toolkit sur des instances Alibaba Cloud ECS
Faisons une application de calcul avec Java ~ Afficher la fenêtre de l'application
Construction d'environnement de développement d'applications Web en Java (pour les personnes inexpérimentées)
Comment déployer une application Java sur Alibaba Cloud EDAS dans Eclipse
Communication socket avec un navigateur Web utilisant Java et JavaScript ②
J'ai essayé d'implémenter une application web pleine de bugs avec Kotlin
Communication socket avec un navigateur Web utilisant Java et JavaScript ①
Création d'un MOB à l'aide du plug-in Minecraft Java Mythicmobs | Préparation 1
Essayez d'utiliser RocksDB avec Java
Rechercher un sous-ensemble en Java
Faire un diamant en utilisant Java
AWS Elastic Beanstalk # 1 avec Java à partir de zéro - Création d'un environnement d'application Web Java à l'aide de l'interface de ligne de commande EB-
Créons une application TODO en Java 4 Implémentation de la fonction de publication
Collecte des informations client lorsqu'une erreur se produit dans une application Web
Créons une application TODO en Java 6 Implémentation de la fonction de recherche
Créons une application TODO en Java 8 Implémentation des fonctions d'édition
Comment faire fonctionner automatiquement un écran créé en Java sous Windows
Créons une application TODO avec Java 1 Brève explication de MVC
Créons une application TODO en Java 5 Changer l'affichage de TODO
3 Implémentez un interpréteur simple en Java
J'ai créé un PDF avec Java.
Exécuter des applications Java dans Azure Batch
Chiffrer à l'aide du chiffrement RSA en Java
Télécharger des fichiers à l'aide de Java HttpURLConnection
Accéder à Teradata depuis une application Java
Créer un projet Java à l'aide d'Eclipse
Un exemple simple de rappels en Java
Utilisation de Java avec AWS Lambda-Eclipse Préparation
Connexion HTTPS utilisant tls1.2 dans Java 6
J'ai essayé d'utiliser JWT en Java
Restez coincé dans un Java Primer
Structure de l'application Web par Java et flux de traitement dans la couche de présentation
Déployez une image composée de Tomcat, Java et MySQL à l'aide d'Ansible et Jenkins
Création d'un projet (et d'un référentiel GitHub) à l'aide de Java et Gradle avec IntelliJ IDEA
Création d'un environnement de développement pour les applications Web Java avec Docker pour Mac Part1
Volume d'essais pour créer une application Web Java sur Windows Server 2016
Comment migrer une application Web créée dans un environnement Docker local vers AWS
L'histoire selon laquelle le servlet n'a pas pu être chargé dans l'application Web Java
Déployer une application Node.js sur une instance ECS à l'aide du Cloud Toolkit
Créer un environnement de développement d'applications Web Java avec Docker pour Mac Part2