Bash-Only
Deployment
Andrea Francia
Introduzione
A cosa ci serve avere
il deploy automatico?
chiedere al pubblico
Scrivere un sistema di
orchestration
Perché non usare la
Bash?
chiedere al pubblico
Perché usare la Bash?
è onnipresente
(e anche preinstallata su
tutti(*) i sistemi operativi)
non ha dipendenze (*)
(continua a funzionare anche dopo
che hai incasinato tutte le gemme
di ruby)
fa una cosa sola
(la maggior parte delle persone la
usa senza aver mai aperto il
manuale)
è stabile
(è già fuori moda)
https://twitter.com/Dreamoid/status/436974284666179584
Cosa vediamo oggi?
• Poor Mans Testing (in Bash)
• Idempotenza (in Bash)
• Deployment (over SSH)
Poor Mans Testing
Cos'è il testing
automatico?
Perché può essere
utile in Bash?
Come si fa?
(DEMO)
Idempotenza
Qual è il problema con il
deploy non idempotenti?
chiedere al pubblico
Cosa vuol dire
idempotenza?
chiedere al pubblico
Uno script di deploy è idempotente
è come lavarsi le mani, la prima
volta che le lavi diventano pulite, la
seconda restano pulite
mkdir cartella
Come risolvere il
problema?
I quattro metodi per
ottenere l’idempotenza
Metodo 1: la ruspa
Metodo 2: la sonda
Metodo 3: la sovrascrittura
Metodo 4: l’opzione segreta
(aka: Usare comandi già idempotenti)
“Metodo” 5(*): la finta
• (*) C’è un motivo perché questo è il 5^ metodo di
quattro. Non a caso si chiama “la finta”!.
Esempi con apt-get
Altri esempi con apt-get
• unzip -h > /dev/null || sudo apt-get install unzip -y
• git --help > /dev/null || sudo apt-get install git -y
• nginx -v || sudo apt-get install nginx -y
Esempi con i symlinks
Una soluzione
Altra soluzione
Qual è la soluzione migliore?
Alcuni comandi sono già
idempotenti di natura
• chown -R qmaill:root /var/log/qmail
• chmod -R 750 /var/log/qmail
Approfondimenti
• Aggiungere una riga al file hosts in modo
idempotente (vedi file idempotenza-file-hosts.txt)
• Creare un repository Git in modo idempotente (vedi
file idempotenza-git-repo.txt)
• Creare utenti in modo idempotenti.
Deployment con
Bash+SSH
Deployment o
Provisioning?
chiedere al pubblico
Cosa intendo io con
Deployment
Quali sono i problemi
da risolvere?
Come lo faccio io?
(DEMO)
Recap
Cosa abbiamo visto?
• Testing in Bash
• Idempotenza in Bash
• Deployment con solo SSH+Bash
Prossime puntate?
• Roundtrip code deploy using git over SSH
• Fully automated package installation
• Test Driven Development in Bash
• … altro?
http://andreafrancia.it/devops.html
Conclusioni
• La Bash è stupida (… o è semplice?)
• La Bash è vecchia (… è matura?)
• La Bash è brutta (… o tiene lontano i cacciatori di
medaglie?)
Q/A
@andreafrancia
devops@andreafrancia.it
+39 3209437233

Bash-Only Deployment