J'ai essayé de comprendre comment utiliser les pipelines de BitBucket pour déployer automatiquement mon application (Laravel) sur une instance de Vultr Server.
J'ai les étapes suivantes que je fais manuellement, que j'essaie de répliquer de manière autonome:
commit
mes modifications et Push
au dépôt BitBucketssh root@ipaddress
cd
dans le bon répertoire: cd /var/www/html/app/
pull
depuis mon dépôt BitBucket: git pull Origin master
composer install
, php artisan migrate
etc..exit
Je crois comprendre que vous pouvez utiliser des pipelines pour automatiser cela, est-ce vrai?
Jusqu'à présent, j'ai configuré une paire de clés SSH pour les pipelines et mon serveur, donc authorized_keys
le fichier contient la clé publique de BitBucket Pipelines.
Mon fichier de pipelines bitbucket-pipelines.yml
est comme suit:
image: atlassian/default-image:latest
pipelines:
default:
- step:
deployment: staging
caches:
- composer
script:
- ssh root@ipaddress
- cd /var/www/html/app/
- git pull Origin master
- php artisan down
- composer install --no-dev --prefer-dist
- php artisan cache:clear
- php artisan config:cache
- php artisan route:cache
- php artisan migrate
- php artisan up
- echo 'Deploy finished.'
Lorsque le pipeline s'exécute, j'obtiens l'erreur: bash: cd: /var/www/html/app/: No such file or directory
.
J'ai lu que chaque action de script est exécutée dans son propre conteneur.
Chaque étape de votre pipeline démarre un conteneur Docker distinct pour exécuter les commandes configurées dans le script
L'erreur que j'obtiens est logique si elle n'exécute pas cd /var/www/html/app
dans le VPS après s'être connecté à l'aide de SSH.
Quelqu'un pourrait-il me guider dans la bonne direction?
Merci
Les commandes que vous définissez sous script
vont être exécutées dans un conteneur Docker et non sur votre VPS.
Au lieu de cela, placez toutes vos commandes dans un fichier bash sur votre serveur.
1 - Créez un fichier bash pull.sh
sur votre VPS, pour effectuer toutes vos tâches de déploiement
#/var/www/html
php artisan down
git pull Origin master
composer install --no-dev --prefer-dist
php artisan cache:clear
php artisan config:cache
php artisan route:cache
php artisan migrate
php artisan up
echo 'Deploy finished.'
2 - Créez un script deploy.sh
dans votre référentiel, comme ça
echo "Deploy script started"
cd /var/www/html
sh pull.sh
echo "Deploy script finished execution"
3 - Enfin mettez à jour votre bitbucket-pipelines.yml
fichier
image: atlassian/default-image:latest
pipelines:
default:
- step:
deployment: staging
script:
- cat ./deploy.sh | ssh <user>@<Host>
- echo "Deploy step finished"
Je recommanderais déjà de cloner votre référentiel sur votre VPS dans /var/www/html
et testez votre pull.sh
fichier d'abord manuellement.
Le problème avec la réponse marquée comme solution est que le processus SH ne se fermera pas si l'une des commandes à l'intérieur échoue.
Cette commande php artisan route:cache
par exemple, peut échouer facilement! sans parler du pull!
Et pire encore, le script SH exécutera le reste des commandes sans arrêt en cas d'échec.
Je ne peux pas utiliser de commande docker car après chaque, le processus CI s'arrête et je n'arrive pas à comprendre comment éviter ces commandes pour ne pas quitter le processus CI. J'utilise le SH mais je vais commencer à ajouter des conditions basées sur le code de sortie de la commande précédente, donc nous savons si quelque chose s'est mal passé pendant le déploiement.