L'integrazione continua come termine si riferisce a due idee distinte.
Il primo è un flusso di lavoro: invece di tutti i membri di una squadra che lavorano nella propria filiale e dopo un paio di settimane di programmazione, tentano di unire le loro modifiche alla linea principale, tali modifiche sono integrate (quasi) continuamente. Ciò consente ai problemi di emergere in anticipo e di evitare modifiche incompatibili. Tuttavia, ciò richiede che possiamo facilmente verificare se una modifica "funziona".
È qui che arriva 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 tuo software funziona su sistemi diversi o in configurazioni diverse e devi essere sicuro 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 problemi. Se i test falliscono, lo sviluppatore appropriato dovrebbe ricevere una notifica in modo che possano risolvere il problema che hanno introdotto ("rottura della build", anche quando non c'è build come compilation).
Si scopre che un server di questo tipo è prezioso per qualcosa di più del semplice test. In effetti, la maggior parte dei software CI è davvero schifosa a eseguire test in varie configurazioni, ma è buona per gestire tutti i tipi di lavoro. Per 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 morti. Possiamo eseguire analisi statiche, controlli di stile, strumenti di copertura del test, ecc. Sul codice. La documentazione può essere generata. Al termine di tutte le suite di test, è possibile avviare il processo di packaging in modo da essere pronti a rilasciare il software. Questo è utile in un'impostazione agile in cui si desidera un prodotto distribuibile (e dimostrabile) in ogni momento. Con l'avvento delle app Web, c'è anche l'idea di implementazione continua : se tutti i test passano, possiamo automaticamente trasferire le modifiche alla produzione. Ovviamente, ciò richiede che tu sia veramente sicuro della tua suite di test (in caso contrario, hai problemi più grandi).