Script Makefile développement avec un projet Laravel

Script makefile qui permet de raccourcir les commandes de développement, de déploiement en production et de rapatriement en local pour Laravel.

Récupère séparément les fichiers ou la base de données.

PHONY: dev deploy_to_prod dbdeploy import dbimport help

ssh_port=
ssh_user=
ssh_add=
path=
mysql_user=
mysql_pass=
mysql_db=

name=
git_name=
git_repo=
laDate=date +%Y_%m_%d_%H_%M_%S

help: ## Affiche cette aide
        @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'

dev: ## Lance le serveur de développement
        php artisan serve

import: ## Importe les fihciers distants
    rsync -av -e "ssh -p $(ssh_port)" $(ssh_user)@$(ssh_add):$(path) ./ \
                --exclude vendor \
                --exclude node_modules \
                --exclude /public/hot \
                --exclude /public/storage \
                --exclude /public/modules \
                --exclude /storage/logs \
                --exclude /storage/*.key \
                --exclude .env \
                --exclude .phpunit.result.cache \
                --exclude Homestead.json \
                --exclude Homestead.yaml \
                --exclude npm-debug.log \
                --exclude yarn-error.log

deploy_to_prod: ## Déploie une nouvelle version de l'application sur le serveur de production
    cd ../; mkdir -p Save/`$(laDate)`_$(name);
    rsync -av -e "ssh -p $(ssh_port)" $(ssh_user)@$(ssh_add):$(path) ../Save/`$(laDate)`_$(name)/ \
                    --exclude vendor \
                    --exclude node_modules \
                    --exclude /public/hot \
                    --exclude /public/storage \
                    --exclude /public/modules \
                    --exclude /storage/logs \
                    --exclude /storage/*.key \
                    --exclude .env \
                    --exclude .phpunit.result.cache \
                    --exclude Homestead.json \
                    --exclude Homestead.yaml \
                    --exclude npm-debug.log \
                    --exclude yarn-error.log
    ssh $(ssh_user)@$(ssh_add) -p $(ssh_port) "cd $(path); mysqldump -u $(mysql_user) -p$(mysql_pass)  $(mysql_db) > dump.sql"
    rsync -av -e "ssh -p $(ssh_port)" $(ssh_user)@$(ssh_add):$(path)/dump.sql ../Save/`$(laDate)`_$(name)/
    ssh $(ssh_user)@$(ssh_add) -p $(ssh_port) "cd $(path); rm dump.sql"
    ssh $(ssh_user)@$(ssh_add) -p $(ssh_port) "cd; git clone $(git_repo); cd $(git_name); cp -R * $(path)/; cd $(path); composer install; php artisan migrate --force"

dbdeploy: ## Envoie les données sur le serveur
    mysqldump -u $(mysql_user) -p$(mysql_pass)  $(mysql_db) > dump.sql
    rsync -av ./dump.sql -e "ssh -p $(ssh_port)" $(ssh_user)@$(ssh_add):$(path)
    ssh $(ssh_user)@$(ssh_add) -p $(ssh_port) "cd $(path); mysql -u $(mysql_user) -p$(mysql_pass)  $(mysql_db) < dump.sql; rm dump.sql"
    rm dump.sql
    rsync -av ./ -e "ssh -p $(ssh_port)" $(ssh_user)@$(ssh_add):$(path) \
            --exclude Makefile \
            --exclude vendor \
            --exclude .git \
            --exclude .idea \
            --exclude node_modules \
            --exclude /public/hot \
            --exclude /public/storage \
            --exclude /public/modules \
            --exclude /storage/logs \
            --exclude /storage/*.key \
            --exclude .env \
            --exclude .phpunit.result.cache \
            --exclude Homestead.json \
            --exclude Homestead.yaml \
            --exclude npm-debug.log \
            --exclude yarn-error.log
    ssh $(ssh_user)@$(ssh_add) -p $(ssh_port) "cd $(path); composer install"

dbimport: ## Récupère les données depuis le serveur
    ssh $(ssh_user)@$(ssh_add) -p $(ssh_port) "cd $(path); mysqldump -u $(mysql_user) -p$(mysql_pass)  $(mysql_db) > dump.sql"
    rsync -av -e "ssh -p $(ssh_port)" $(ssh_user)@$(ssh_add):$(path)dump.sql ./
    ssh $(ssh_user)@$(ssh_add) -p $(ssh_port) "cd $(path); rm dump.sql"
    mysql -u $(mysql_user) -p$(mysql_pass)  $(mysql_db) < dump.sql
    rm dump.sql

Laisser un commentaire