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
3 Réponses :
Dans tomcat, il existe deux options pour déployer une guerre:
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 .
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:
{ "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:
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:
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
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:
Dans tomcat, configuration avec jenkins et tomcat:
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
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
peut-il être utilisé dans un script groovy de pipeline?
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é?