Article original : Laravel Continuous Deployment With CircleCI and Deployer
Par Bryan Lee
Il existe de nombreuses solutions de déploiement pour Laravel, allant de la connexion SSH à votre machine et de l'exécution de git pull (?) à des solutions d'économie de temps comme Envoyer ou à la création de votre propre solution avec Deployer. Personnellement, j'adore Deployer car il est gratuit, très flexible et peut soutenir vos projets dès leur début jusqu'à ce que vous passiez à plusieurs machines.
Deployer fonctionne en exécutant vos scripts de déploiement localement et nous pouvons rendre cela encore plus pratique en intégrant Deployer dans votre pipeline CI. Pour un projet récent, j'ai utilisé CircleCI pour exécuter tous mes tests et déployer automatiquement.
Installation de Deployer en Local
Pour gagner du temps, je vous recommande vivement d'avoir Deployer installé localement et configuré pour votre application. Cela permet de gagner beaucoup de temps en évitant de devoir déboguer votre configuration Deployer lorsque votre build CircleCI échoue.
Laravel et CircleCI
Si vous avez déjà configuré CircleCI pour les tests de votre projet Laravel, passez à la section suivante. Sinon, je suppose que vous avez au moins déjà un compte CircleCI et un projet de base créé.
Créez un fichier .circleci/config.yml avec le contenu suivant :
version: 2
jobs:
build:
docker:
# Spécifiez la version souhaitée ici
- image: circleci/php:7.1-browsers
- image: circleci/mysql:5.7
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: yes
MYSQL_USER: root
MYSQL_ROOT_PASSWORD: ''
MYSQL_DATABASE: laravel
working_directory: ~/laravel
steps:
- checkout
- run:
name: Installer les extensions PHP
command: |
sudo docker-php-ext-install zip
sudo docker-php-ext-install pdo_mysql
sudo apt install -y mysql-client
- run: sudo composer self-update
# Télécharger et mettre en cache les dépendances
- restore_cache:
keys:
- v1-dependencies-{{ checksum "composer.json" }}
# basculer vers l'utilisation du dernier cache si aucune correspondance exacte n'est trouvée
- v1-dependencies-
- run: composer install -n --prefer-dist
- save_cache:
paths:
- ./vendor
key: v1-dependencies-{{ checksum "composer.json" }}
- run:
name: Configurer les éléments Laravel
command: |
php artisan migrate --force
- run: ./vendor/bin/phpunit
workflows:
version: 2
notify_deploy:
jobs:
- build
Il s'agit d'un fichier config.yml très basique pour Laravel. Il installera PHP, MySQL et exécutera les tests PHPunit. N'hésitez pas à modifier cela pour répondre à vos besoins.
Déploiement avec CircleCI
Après l'exécution de nos tests, nous voulons que CircleCI commence automatiquement à déployer sur notre serveur. N'oubliez pas que Deployer utilise SSH, donc sur notre serveur distant, nous voulons créer une paire de clés SSH ssh-keygen -t rsa -b 4096 -C "votre@email.com". Nous voulons ajouter cette clé que nous avons créée dans CircleCI en tant que clé de déploiement. Prenez note de l'empreinte, car nous devrons l'ajouter à notre fichier de configuration plus tard.
Créons un nouvel emploi dans notre fichier de configuration :
jobs:
build: ... # ci-dessus
deploy:
docker:
- image: circleci/php:7.2-browsers
working_directory: ~/laravel
steps:
- checkout
Cela indique à CircleCI que nous avons un nouvel emploi appelé deploy et de le construire sur la base de l'image docker php-7.2-browsers.
Vous souvenez-vous de l'empreinte que nous avons notée lorsque nous l'avons ajoutée dans CircleCI ? Nous devons la référencer dans notre configuration afin que la clé SSH soit présente dans notre conteneur.
jobs:
build: ... # ci-dessus
deploy:
docker:
- image: circleci/php:7.2-browsers
working_directory: ~/laravel
steps:
- checkout
- add_ssh_keys:
fingerprints:
- "VOTRE_EMPREINTE"
Ainsi, CircleCI sait ajouter cette clé via l'empreinte dans le conteneur docker et cela nous permettra d'exécuter Deployer et de nous connecter en SSH à notre serveur distant pour déployer.
jobs:
build: ... # ci-dessus
deploy:
docker:
- image: circleci/php:7.2-browsers
working_directory: ~/laravel
steps:
- checkout
- add_ssh_keys:
fingerprints:
- "VOTRE_EMPREINTE"
- run:
name: Installer Deployer
command: |
curl -LO https://deployer.org/deployer.phar
sudo mv deployer.phar /usr/local/bin/dep
sudo chmod +x /usr/local/bin/dep
- run:
name: Déployer
command: |
dep deploy www.votre_serveur.com
Avec l'emploi deploy défini, la dernière étape consiste à dire à CircleCI de l'exécuter après que nos tests réussissent. C'est simple, nous avons déjà un workflow de base nommé notify_deploy sur lequel nous pouvons construire.
workflows:
version: 2
notify_deploy:
jobs:
- build
- deploy:
requires:
- build
filters:
branches:
only: master
Cela indique à CircleCI que dans notre workflow notify_deploy, en plus d'exécuter build, nous voulons exécuter deploy après sa fin, et de ne le faire que sur la branche master.
Avec tout cela fait, nous pouvons maintenant pousser le fichier de configuration vers notre dépôt git et regarder les tests et le déploiement se faire automatiquement. Utilisez-vous une méthode différente pour déployer Laravel ? Faites-le moi savoir, j'adorerais en entendre parler !