L'integrazione continua come termine si riferisce a due idee distinte.
Il primo è un flusso di lavoro: invece di tutti quelli che fanno parte di una squadra che lavora nel proprio ramo e poi dopo un paio di settimane di programmazione cercano di fondere i loro cambiamenti nella linea principale, che i cambiamenti vengono integrati (quasi) continuamente. Ciò consente ai problemi di emergere presto ed evita modifiche incompatibili. Tuttavia, ciò richiede che possiamo facilmente verificare se una modifica "funziona".
È qui che entra in gioco la seconda idea, che si è rivelata molto più popolare. Un server CI è un ambiente pulito in cui le modifiche vengono testate il più rapidamente possibile. L'ambiente pulito è necessario affinché la build sia riproducibile. Se funziona una volta, dovrebbe sempre funzionare. Questo evita problemi "ma ha funzionato sulla mia macchina". In particolare, un server CI è prezioso quando il software viene eseguito su sistemi diversi o in configurazioni diverse ed è necessario assicurarsi che tutto funzioni.
La mancanza di un passo di costruzione è irrilevante. Tuttavia, CI ha senso solo se si dispone di una suite di test. Questa suite di test deve essere automatica e non deve presentare errori. Se i test falliscono, lo sviluppatore appropriato dovrebbe ricevere una notifica in modo che possano risolvere il problema che hanno introdotto ("interruzione della compilazione", anche quando non esiste una compilazione come compilation).
Si scopre che un server del genere è prezioso per qualcosa di più del semplice test. In effetti, la maggior parte dei software CI è davvero scadente nell'esecuzione dei test in varie configurazioni, ma è bravo a gestire tutti i tipi di lavori. Ad esempio, oltre ai test unitari "continui", potrebbe esserci un test completo come build notturno. Il software può essere testato con più versioni di Python, diverse versioni di libreria. Un sito Web potrebbe essere testato per collegamenti non funzionanti. Possiamo eseguire analisi statiche, controlli di stile, strumenti di copertura dei test, ecc. Tramite il codice. La documentazione può essere generata. Quando tutte le suite di test passano, il processo di packaging può essere avviato in modo da essere pronti a rilasciare il software. Ciò è utile in un'impostazione agile in cui si desidera un prodotto distribuibile (e dimostrabile) in ogni momento. Con l'ascesa delle app Web, c'è anche l'idea di una distribuzione continua: Se tutti i test vengono superati, possiamo inviare automaticamente le modifiche alla produzione. Naturalmente, questo richiede che tu sia davvero fiducioso nella tua suite di test (in caso contrario, hai problemi più grandi).