Déploiement continu
Maintenant que vous arrivez à déployer votre application à l'aide de Deployer, le plus dur est fait !
Mais il serait quand même bien plus pratique que le déploiement se fasse de manière automatisée quand un commit est envoyé sur le serveur.
Gitlab propose dans son interface de définir des variables qui seront ensuite injectées dans vos scripts comme variables d'environnement.
Cette fonctionnalité est particulièrement utile pour y stocker nos secrets de déploiement, comme la clé SSH que devra utiliser Deployer.
Vous pouvez accéder à ces variables depuis l'interface de Gitlab, en passant par le menu à gauche : Settings > CI/CD puis sur la page dans la section Variables.
Il est de bon ton d'y mettre aussi le nom de l'utilisateur que Deployer va utiliser pour se connecter.
Ces variables sont accessibles uniquement par les membres du projet ayant au minimum le rôle Maintainer, et peuvent être masquées dans les logs des jobs.
Dans votre script Gitlab, vous pouvez lancer un agent SSH qui tournera dans le conteneur, et lui ajouter votre clé SSH depuis les variables Gitlab, avec les commandes suivantes :
eval $(ssh-agent -s)
echo "${DEPLOYMENT_KEY}" | tr -d "\r" | ssh-add -
Évidemment, remplacez DEPLOYMENT_KEY par le nom que vous avez donné à la variable correspondante.
Étant donné que vous n'avez pas besoin d'un environnement PHP complet pour effectuer le déploiement, mais juste du script de Deployer, vous pouvez utiliser comme image pour votre job l'image suivante : registry.gitlab.com/pipeline-components/deployer:latest.
Continuous Deployment et Continuous Delivery
Il existe une nuance dans l'acronyme CD, qui peut éventuellement signifier deux pratiques différentes :
- Le déploiement continu, ou les changements sont automatiquement mis en ligne
- La livraison continue, qui nécessite une fois que tout est prêt une action manuelle pour lancer le déploiement
Si vous le souhaitez, vous pouvez mettre en place une livraison continue très facilement avec Gitlab CI/CD : il suffit de mettre sur votre job de déploiement la clé when à la valeur manual. Vous verrez ensuite dans la pipeline un bouton similaire à celui-ci apparaître dans votre pipeline :
Vous avez maintenant en main toutes les clés nécessaires pour mettre en place du déploiement continu sur votre projet.
Essayez de mettre en place une pipeline respectant les règles suivantes :
- Ne faire les tests que sur les merge requests et sur votre branche principale
- Ne faire les déploiements que sur votre branche principale
Correction
Correction
.php-tests-common: &php-tests-common
stage: test
image: jakzal/phpqa:php8.3-alpine
only:
- merge_requests
- main
before_script:
- composer install
cache:
paths:
- vendor/
# ...
deploy:
only:
- main
stage: deploy
image:
entrypoint:
- ''
name: deployphp/deployer:v7
before_script:
- mkdir -p ~/.ssh
- eval $(ssh-agent -s)
- echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
- chmod 644 ~/.ssh/known_hosts
- echo "${PRODUCTION_DEPLOYMENT_KEY}" | tr -d "\r" | ssh-add -
script:
- php /bin/deployer.phar deploy
- php /bin/deployer.phar database:migrate