Usiamo lo Chef sia per la gestione della configurazione (assicurandoci che un "nodo DB" abbia la giusta versione del DB corretto su di esso, che un "App Server" abbia la versione giusta di Java e di env vars su di esso, ecc.) . così come la distribuzione ( chef-client --once
) delle nostre app ai nodi appropriati del server delle app.
Per me, personalmente, mi sembra che il deployment appartenga al regno del server CI. Tutto a parte l'app (il contenitore, il sistema operativo, gli strumenti di sistema, la configurazione del sistema, ecc.) Appartiene alla gestione della configurazione ed è quindi meglio gestito da strumenti come Chef, Puppet, ecc.
Attualmente, le nostre build CI producono un artefatto (un JAR eseguibile con un contenitore Tomcat incorporato), quindi esegue lo Chef-Client su tutti i nodi su cui il JAR deve essere distribuito. Lo Chef-Client è configurato per estrarre il JAR dal server CI. Mi sembra un hacker e sto cercando di trovare una soluzione migliore e più convincente.
Quindi chiedo:
- La distribuzione appartiene al server CI o allo strumento CM? Perché?
- Se appartiene al server CI, quali meccanismi (SSH, SCP, ecc.) devono essere utilizzati dal server CI per eseguire effettivamente la distribuzione? Usiamo Bamboo ma potremmo altrettanto facilmente parlare di Jenkins, Hudson, ecc.
- C'è una differenza tra distribuire (posizionando l'app sul nodo) e in esecuzione . L'esecuzione appartiene anche al server CI, allo strumento CM o ad altri processi? In altre parole, cosa dovrebbe smettere la "vecchia" versione dell'app, sostituirla con la "nuova" versione e quindi avviare la nuova versione? È un candidato per qualcosa come Run Deck?