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?)