La configuration, le CI et les flux de déploiement représente un peu l’ancien script bash.
Malgré mon profond intérêt pour les subtilités de Bash (/sarcasme), j’ai continué à chercher des solution aux mêmes situations sur Google et StackOverflow.
Pour éviter d’avoir à le refaire moi-même et pour votre plaisir de lecture, les voici.
Vérifier si un fichier existe
1if [ ! -f ./pdfgen/pdfgen ]; then
2 echo "Building pdfgen binary"
3 npm run --prefix pdfgen build:linux
4else
5 echo "Pdfgen binary already exists, skipping build"
6fi
Vérifier si un lien symbolique existe
1if [ ! -L /usr/local/bin/heroku ];
2then
3 wget https://cli-assets.heroku.com/branches/stable/heroku-linux-amd64.tar.gz
4 sudo mkdir -p /usr/local/lib /usr/local/bin
5 sudo tar -xvzf heroku-linux-amd64.tar.gz -C /usr/local/lib
6 sudo ln -s /usr/local/lib/heroku/bin/heroku /usr/local/bin/heroku
7fi
Vérifier si une variable d’environnement est définie
1# long
2if [[ -z "${CIRCLE_BRANCH}"] ]; then
3 npm run redis-cli flushall
4fi
5
6npm run sync
7
8# one-liner
9[-z "${CIRCLE_BRANCH}"] && npm run redis-cli flushall; npm run sync
Basculer une variable d’environnement
1case $CIRCLE_BRANCH in
2 "develop")
3 export ENVIRONMENT="dev"
4 export HEROKU_APP=dev-app
5 ;;
6 "staging")
7 export ENVIRONMENT="staging"
8 export HEROKU_APP=staging-app
9 ;;
10 "production")
11 export ENVIRONMENT="production"
12 export HEROKU_APP=production-app
13 ;;
14esac
Demander à l’utilisateur
1read -p "Are you sure you want to merge 'develop' into 'staging'? (y/N)" -n 1 -r
2echo # we like having a new line
3
4if [[ $REPLY =~ ^[Yy]$ ]]
5then
6 git merge develop --ff-only
7 git push
8fi
Un dernier conseil, s’il s’agit de plusieurs lignes, essayez d’utiliser quelque chose comme JavaScript ou Python pour écrire votre script.
Injecter .env dans votre session/environnement
Nous avons des fichiers .env
, Docker Compose traite cela avec une utilisation habituelle, mais disons que nous voulons que quelque chose tourne en dehors de Docker (et sans utiliser quelque chose comme dotenv).
Voici l’extrait de code pour un shell UNIX
1export $(cat .env | xargs)