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)