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#
if [ ! -f ./pdfgen/pdfgen ]; then
echo "Building pdfgen binary"
npm run --prefix pdfgen build:linux
else
echo "Pdfgen binary already exists, skipping build"
fi
Vérifier si un lien symbolique existe#
if [ ! -L /usr/local/bin/heroku ];
then
wget https://cli-assets.heroku.com/branches/stable/heroku-linux-amd64.tar.gz
sudo mkdir -p /usr/local/lib /usr/local/bin
sudo tar -xvzf heroku-linux-amd64.tar.gz -C /usr/local/lib
sudo ln -s /usr/local/lib/heroku/bin/heroku /usr/local/bin/heroku
fi
Vérifier si une variable d’environnement est définie#
# long
if [[ -z "${CIRCLE_BRANCH}"] ]; then
npm run redis-cli flushall
fi
npm run sync
# one-liner
[-z "${CIRCLE_BRANCH}"] && npm run redis-cli flushall; npm run sync
Basculer une variable d’environnement#
case $CIRCLE_BRANCH in
"develop")
export ENVIRONMENT="dev"
export HEROKU_APP=dev-app
;;
"staging")
export ENVIRONMENT="staging"
export HEROKU_APP=staging-app
;;
"production")
export ENVIRONMENT="production"
export HEROKU_APP=production-app
;;
esac
Demander à l’utilisateur#
read -p "Are you sure you want to merge 'develop' into 'staging'? (y/N)" -n 1 -r
echo # we like having a new line
if [[ $REPLY =~ ^[Yy]$ ]]
then
git merge develop --ff-only
git push
fi
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
export $(cat .env | xargs)