2015-08-07 1 views
0

Je suis en train de configurer l'intégration continue et le déploiement de projets sur des instances AWS EC2 au sein de VPC en utilisant GoCD (le même peut également être essayé dans Jenkins). Idéalement, je voudrais déclencher la construction, distribuer et déployer/redémarrer les projets de mon système GoCD. Je suis capable de générer et de distribuer des projets à des instances privées dans VPC. Cependant, je rencontre des problèmes lors du redémarrage du projet sur l'instance privée . Mes projets sont des projets microservices basés sur java [dropwizard].Exécuter un script à distance sur une instance privée AWS VPC

Pour le redémarrage suivant est ce que je l'ai fait jusqu'à présent:

1- Avoir un script restart.sh sur instance privée cible pour arrêter et redémarrer le projet.

#!/bin/sh 
BASE_DIR=/home/ubuntu/project 
PROJECT=my_deployment_test 

# Kill the existing API service 
echo "Stopping test Server instance" 
#sudo pkill -f 'my_deployment_test.jar' 

echo "Starting my_deployment_test" 
# Start API Services 
sudo /usr/bin/java -cp "$BASE_DIR/$PROJECT/lib/*:$BASE_DIR/$PROJECT" -jar $BASE_DIR/$PROJECT/my_deployment_test.jar server $BASE_DIR/$PROJECT/conf.yml & 

Ce script fonctionne correctement lorsqu'il est exécuté localement dans l'instance privée. Il tue le processus existant et démarre le projet.

2- Avoir un script remoteRestart.sh dans l'instance publique/NAT à travers lequel je peux déclencher le présent restart.sh ci-dessus dans l'instance privée

ssh -i private_key.pem [email protected] /home/ubuntu/project/my_deployment_test/restart 

Si le script ci-dessus fonctionne alors je serais une tâche GoCD exécute remoteRestart.sh présent sur l'instance publique/NAT qui va redémarrer le projet en privé.

Cependant, je suis confronté à des problèmes lors de l'exécution de remoteRestart.sh sur l'instance publique/NAT elle-même. Dans la console, je peux voir la sortie de l'instruction echo. Le processus de projet précédent sur l'instance privée est également en cours de suppression, mais le projet ne démarre pas.

Il était possible d'utiliser le service de déploiement de code AWS en utilisant S3 pour distribuer mais je trouve [pour mon cas] qu'il ne sera pas nécessaire de stocker tous les éléments de projet sur s3 chaque fois que je dois déployer.

Où puis-je me tromper avec les scripts ci-dessus. Et des alternatives?

grâce

Divya Dyuti

+0

Il se peut que la commande soit détruite avant le redémarrage. Peut-être pourriez-vous essayer d'exécuter le script de redémarrage en arrière-plan ('&')? –

+0

Voulez-vous dire utiliser l'option ssh -f pour exécuter le script de redémarrage en tant que processus d'arrière-plan? –

+0

Merci beaucoup. Cela a aidé, les changements dans la commande que j'ai faite pour exécuter le script de redémarrage comme processus d'arrière-plan est: ssh -i private_key.pem user @ host "maintenant -f/home/ubuntu/project/mon_déploiement_test/restart" –

Répondre

0

Le script peut être se faire tuer lors de la déconnexion de la session. Essayez d'exécuter le script en arrière-plan (&) ou transmettez-le via at now.

+0

Merci monsieur. Oui, je l'ai remis par "à l'heure actuelle" et cela a fonctionné dans la première partie. –