Tutti gli strumenti che hai menzionato (Jenkins, formica, git) aiutano a costruire e testare effettivamente il tuo artefatto. Nel mondo java di solito questo può essere guerra, orecchio o semplicemente zip con l'applicazione all'interno. A volte per applicazioni complicate può essere più di un artefatto. Per altre piattaforme di programmazione può variare, DLL, binari per più piattaforme diverse e così via.
Ora diciamo che vuoi implementare la tua applicazione. Se hai un server puoi farlo manualmente o con qualche script homegrown. Fin qui tutto bene:)
Ma se ci sono un sacco di farm (gruppi di macchine), le diverse farm dovrebbero avere implementazioni con configurazioni diverse (database, diverse posizioni geografiche) E se la tua applicazione può scalare orizzontalmente in modo tale da aggiungere un paio di nuovi nodi al la fattoria dovrebbe essere un compito banale. Il tuo team addetto al QA potrebbe semplicemente chiedere un nuovo ambiente per eseguire i test, il team delle prestazioni può chiedere un nuovo ambiente o aggiungere nodi alla farm per eseguire stress test e così via. Ora gestire tutte queste cose sembra essere complicato. È qui che entrano in gioco strumenti come ansible, chef, sale, burattini e altri.
In realtà stanno aiutando ad automatizzare la distribuzione. Possono fornire ricette di implementazione, installare dipendenze mancanti (per eseguire il progetto potrebbe richiedere jre, tomcat di una versione specifica e nginx per contenuto statico). Tutto questo a livello di fattoria.
So che la risposta è troppo generica e potrebbe sembrare meno ovvia per lo sviluppatore java (io sono uno di quelli).
Ma se hai una squadra di sistema / devops ragazzi dovrebbero subito puntare sui vantaggi di questi strumenti.