Je suggère la procédure suivante :
un seul shell script (stocké quelque part sur le serveur jenkins) fait tout. En gros, le script fait un scp de l'artefact de construction puis se connecte au serveur (ssh) et effectue toutes les tâches nécessaires au déploiement (configuration de la page de maintenance, sauvegarde de l'application actuelle, déploiement de la nouvelle application, ...).
Sur le serveur Jenkins, il y a au moins 2 travaux :
- le premier fait simplement le build (en utilisant maven, ou tout autre build script)
- le second job fait le déploiement : donc ce job ne fait que lancer le shell script. (Je suggère un job de déploiement pour chaque environnement cible : test, production, ...)
Aucun plugin "spécial" n'est nécessaire pour réaliser ce "déploiement en un clic". Il suffit que l'utilisateur de jenkins ait un accès ssh au serveur cible.
EDIT
Voici un exemple de shell script pour illustrer mon propos
#This script will copy the last artifact build by the job "MyApp" to test.myserver.com
#and remotely execute the deployment script.
#copy the war to the server
#(the job "MyApp" is using maven, that's why the war can be found at this location)
scp -i <HOME_DIR>/.ssh/id_dsa $HUDSON_HOME/jobs/MyApp_Build/workspace/myapp/target/myapp.war deployeruser@test.myserver.com:/tmp/
#connect to the server and execute the deployment script
ssh -i <HOME_DIR>/.ssh/id_dsa deployeruser@test.myserver.com
#The following is just an example of what a deployment script can be.
#of course you must adapt it to your needs and environment
"cd <TOMCAT_DIR>;
#first copy the current war to a backup directory (additionaly, I have a cron task deleting old undeployed apps)
cp -rf myapp-apps/myapp* undeployed/myapp-apps/;
#execute a script (stored on the server) to properly stop the app
sh bin/myapp.sh stop;
#delete current app
rm -rf myapp-apps/myapp;
rm -rf myapp-apps/myapp.war;
#copy the uploaded war in tomcat app directory
cp /tmp/myapp.war myapp-apps/;
#execute a script (stored on the server) to start the app
sh bin/myapp.sh start"