Je souhaite déployer avec jenkins dans l'environnement de test et dans l'environnement de production. Pour ce faire, je dois me connecter au serveur de l'environnement souhaité, quelque chose comme ssh/scp.
Je voudrais savoir quelle est la meilleure façon.
J'ai trouvé des plugins pour ce faire, comme le plug-in Jenkins-Deploy-Plug-in ou Jenkins Publish over SSH. Le premier a beaucoup de problèmes, ce qui n'est pas vraiment digne de confiance pour être déployé en production et pour le second, vous devez changer la configuration globale, qui est un travail manuel pour chaque déploiement.
Des idées pour résoudre ceci? Peut-être avec des scripts ou des plugins?
La seule idée que j'ai actuellement est de se connecter avec jenkins à un serveur (peut-être avec le plugin SSH) et d'y exécuter un script qui se connecte à l'environnement souhaité. Mais ce sont deux connexions. Est-ce vraiment nécessaire? J'espère que cela sera plus simple.
merci pour tout indice.
Je suggère la procédure suivante:
un seul script Shell (stocké quelque part sur le serveur jenkins) fait tout. Fondamentalement, le script scp de l'artefact de génération, puis se connecte au serveur (ssh) et effectue toutes les tâches nécessaires pour déployer (page de maintenance de configuration, sauvegarder l'application actuelle, déployer la nouvelle application, ...).
Sur le serveur jenkins, il y a au moins 2 jobs:
Il ne nécessite aucun plugin jenkins "spécial" pour réaliser ce "déploiement en un clic". Cela nécessite seulement que l'utilisateur jenkins ait un accès ssh au serveur cible.
MODIFIER
Voici un exemple de script Shell pour illustrer mon article
#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 [email protected]:/tmp/
#connect to the server and execute the deployment script
ssh -i <HOME_DIR>/.ssh/id_dsa [email protected]
#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"
L'utilisation de SSH compromet la sécurité de votre environnement
et est assez difficile à dépanner.
Il est préférable d'installer un Jenkins-Slave sur la machine distante
et exécutez-y les tests en exécutant un Job sur l'esclave.
L'esclave est surveillé par le serveur, ce qui vous évite beaucoup de problèmes
gestion de la connexion.
Vous pouvez déclencher le Job distant à la fin d'une build réussie
et lui passer l'artefact de cette construction.
(le premier Job peut également stocker les artefacts sur un lecteur partagé
et passez l'emplacement de ces artefacts au prochain Job).
Vois ici:
Idéalement, vous devriez utiliser quelque chose comme Fabric ou Capistrano pour les déploiements, et appeler ces scripts depuis Jenkins. J'ai largement utilisé Capistrano pour les deux Ruby sur Rails et applications non-Ruby aussi. Le plus grand avantage que je vois sont: