1
votes

Comment déployer War sur Tomcat à l'aide du pipeline Jenkins?

Je souhaite déployer un fichier war en utilisant un pipeline. Quelle est la bonne façon de procéder. Existe-t-il un moyen d'utiliser Deploy to container dans le code du pipeline. Le problème avec l'appel de catalina.sh ou l'utilisation de la commande curl pour déployer à l'aide du gestionnaire jenkins est que je ne trouve aucun moyen de détecter un déploiement réussi.

Existe-t-il un moyen standard de le faire


4 commentaires

Utilisez-vous un pipeline scripté ou un pipeline déclaratif dans jenkins? Est-ce également votre question principale: comment détecter un déploiement réussi dans tomcat?


Trop large, vous devez partager du code ou au moins quelques détails supplémentaires.


@JRichardsz en utilisant la syntaxe groovy


Ma réponse vous a-t-elle aidé?


3 Réponses :


2
votes

Dans tomcat, il existe deux options pour déployer une guerre:

  • copier war dans le dossier webapps
  • upload war vers le point de terminaison http / manager / text / deploy publié par votre chat

Voici quelques approches pour déployer une guerre et obtenir l'état du déploiement (succès | échec)

Vous pouvez mettre l'un des extraits suivants dans la phase de déploiement de votre pipeline ou migrer vers groovy .

/ manager / text / deploy

Ceci est un endpoint qui nous permet de télécharger la guerre depuis l'hôte distant vers le serveur tomcat et comme réponse:

  • Statut HTTP 200 pour réussite ou échec sans distinction
  • Http Body comme:

{
 "status":"200",
 "database_connectivity":"200",
 "read_write_disk":"200",
 "etc":"etc"
}

OK - Listed applications for virtual host localhost
/manager:running:0:manager
/:running:0:ROOT
/docs:running:0:docs
/examples:running:0:examples
/host-manager:running:0:host-manager
/my_app:running:0:my_app
/my_other_app:running:0:my_other_app

Donc, pour détecter si tout va bien, j'exécute cette validation:

CURL_RESPONSE=$(curl -v -u $TOMCAT_USER:$TOMCAT_PASSWORD -T $WAR_PATH "http://$TOMCAT_HOST:$TOMCAT_PORT/manager/text/deploy?path=/$CONTEX_NAME&update=true")    

if [[ $CURL_RESPONSE == *"FAIL"* ]]; then
  echo "war deployment failed"
  exit 1
else    
  echo "war deployed successfully "
  exit 0
fi

Ici vous pouvez trouver les configurations requises pour activer ce point de terminaison:

Copier le fichier war vers les webapps

Après avoir copié le fichier war vers les webapps, vous pouvez lister les applications déployées et trouver le nom de votre application dans la réponse http body: p >

FAIL - Deployed application 
at context path /my_app 
but context failed to start 

Vous pouvez utiliser une boucle avec une interruption comme nombre maximal de tentatives.

Vous trouverez ici les configurations requises pour activer ce point de terminaison:

/ health ou / status

C'est plus propre et comme je le sais, plusieurs plates-formes de surveillance utilisent cette stratégie.

Toutes consistent à exposer un point de terminaison http supplémentaire dans votre application (application Web, repos api, démon, etc.)

Ce point de terminaison doit renvoyer l'une des réponses suivantes:

  • http stasus

    • (200): indiquant que tout va bien dans votre application
    • (! 200): indique que votre application rencontre des problèmes. Si votre application n'a pas été déployée correctement, ce point de terminaison renverra 404.
  • xml ou json

OK - Deployed application at context path /foo

Enfin, vous pouvez utiliser une boucle pour consommer ce point de terminaison / health de votre pipeline Jenkins. Cette stratégie vous permettra de surveiller vos applications à partir de plates-formes externes telles que:


0 commentaires

0
votes

Dans tomcat, configuration avec jenkins et tomcat:

  • Installez et téléchargez les jenkins sur votre serveur et démarrez le serveur, accédez au portail jenkins, puis créez le projet en utilisant "Nouvel élément", sélectionnez le pom.xml et créez le projet maven.
  • Accédez maintenant à votre projet et cliquez sur Configurer et sélectionnez "Restreindre l'emplacement où ce projet peut être exécuté" et ajoutez un maître dans votre expression de niveau.
  • sélectionnez le clisck "Source Code Management" sur git et configurez votre référentiel git, vos informations d'identification et le nom de la branche.
  • Sélectionnez l'option "Build" ajouter Root pom: pom.xml et Goals and options: clean install -DskipTests
  • sélectionnez les "Actions post-construction" et sélectionnez "Déployer la guerre / l'oreille dans un conteneur"
  • Fichiers WAR / EAR: target / test.war
  • Chemin de contexte: test
  • Les conteneurs sélectionnent tomcat et ajoutent des identifiants
  • URL Tomcat: exemple: http: // localhost: 8080 /

Mettez à jour le fichier 'apache-tomcat-8.5.5 \ webapps \ manager \ META-INF \ context.xlm. décommentez la balise Value. et redémarrez le serveur

fichier context.xml

Before : 

<Context antiResourceLocking="false" privileged="true">
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
     allow="192\.168\.0\.9|127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
</Context>

After change :

<Context antiResourceLocking="false" privileged="true" >
</Context>

for auto deployment: go to 'apache-tomcat-8.5.5\conf\context.xml' and add antiResourceLocking="true" in 'Context' tag


0 commentaires

0
votes

Je pense que le meilleur moyen devrait être le plugin de déploiement https://www.jdev.it/deploying-your-war-file-from-jenkins-to-tomcat


1 commentaires

peut-il être utilisé dans un script groovy de pipeline?