
Il Deployment Continuo (distribuzione continua) è un approccio particolare nello sviluppo software, utilizzato per implementare rapidamente, in modo sicuro ed efficace, diverse funzionalità nel software.
L'idea principale è creare un processo automatizzato affidabile che consenta agli sviluppatori di fornire rapidamente agli utenti un prodotto finito. In questo processo vengono apportate modifiche costanti in produzione, il che è chiamato pipeline di consegna continua (CD Pipeline).
Skillbox consiglia: Corso pratico .
Ricordiamo: per tutti i lettori di «Habr» — sconto di 10.000 rubli per l'iscrizione a qualsiasi corso Skillbox con il codice promozionale «Habr».

Per gestire il flusso, è possibile utilizzare una vasta gamma di strumenti, tra cui quelli sia a pagamento che gratuiti. In questo articolo vengono descritti tre delle soluzioni più popolari tra gli sviluppatori che possono essere utili a ogni programmatore.
Jenkins
Un server di automazione completamente autonomo e open source. È consigliato per automatizzare tutti i tipi di attività relative alla compilazione, test, distribuzione o implementazione software.
Requisiti minimi per il PC:
- 256 MB di RAM, 1 GB di spazio su disco.
Ottimale:
- 1 GB di RAM, 50 GB di spazio su disco.
Per funzionare, è necessaria anche un'ulteriore software — Java Runtime Environment (JRE) versione 8.
L'architettura (calcolo distribuito) appare come segue:

Jenkins Server — installazione che gestisce l'hosting GUI e organizza ed esegue l'intero processo di compilazione.
Jenkins Node/Slave/Build Server — dispositivi che possono essere configurati per eseguire il lavoro di compilazione per conto del Master (nodo principale).
Installazione per Linux
Per prima cosa, bisogna aggiungere il repository di Jenkins al sistema:
cd /tmp && wget -q -O — | sudo apt-key add — echo 'deb binary/' | sudo tee -a /etc/apt/sources.list.d/je
Aggiorna il repository dei pacchetti:
sudo apt update
Installare Jenkins:
sudo apt install jenkins
Dopo questo, Jenkins sarà disponibile nel sistema sulla porta predefinita 8080.
Per verificare il funzionamento, è necessario aprire nel browser l'indirizzo :8080. Quindi, il sistema chiederà di inserire la password iniziale dell'utente con diritti di root. Questa password si trova nel file /var/lib/jenkins/secrets/initialAdminPassword.
Ora tutto è pronto per lavorare, si può iniziare a creare pipeline CI/CD. L'interfaccia grafica dell'ambiente di lavoro appare come segue:


Punti di forza di Jenkins:
- scalabilità fornita dall'architettura Master/Slave;
- presenza di API REST XML/JSON;
- possibilità di collegare un gran numero di estensioni grazie ai plugin;
- una comunità attiva e in continua evoluzione.
Contro:
- manca un modulo analitico;
- interfaccia non troppo comoda.
TeamCity
Sviluppo commerciale della JetBrains. Il server è buono grazie a una configurazione semplice e a un'interfaccia eccellente. Nella configurazione predefinita, ci sono molte funzionalità e il numero di plugin disponibili continua a crescere.
Richiede Java Runtime Environment (JRE) versione 8 per il funzionamento.
I requisiti hardware del server non sono critici:
- RAM — 3,2 GB;
- processore — dual-core, 3,2 GHz;
- canale di comunicazione con una larghezza di banda di 1 Gb/s.
Il server consente di raggiungere elevate prestazioni nel lavoro:
- 60 progetti con 300 configurazioni di build;
- assegnazione di 2 MB per il log della build;
- 50 agenti di build;
- possibilità di lavoro per 50 utenti nella versione web e 30 utenti nell'IDE;
- 100 connessioni a SCM esterni, in genere Perforce e Subversion. Tempo medio di modifica — 120 secondi;
- oltre 150 modifiche al giorno;
- lavoro con database su un singolo server;
- impostazioni del processo server JVM: -Xmx1100m -XX:MaxPermSize=120m.
I requisiti per l'agente sono determinati dalle build in esecuzione. L'obiettivo principale del server è monitorare tutti gli agenti connessi e distribuire le build dalla coda a questi agenti in base ai requisiti di compatibilità, riportando i risultati. Gli agenti operano su diverse piattaforme e sistemi operativi, oltre a un ambiente preconfigurato.
Tutte le informazioni sui risultati delle build sono memorizzate nel database. In primo luogo, si tratta della cronologia e di altri dati simili, modifiche VCS, agenti, code di build, account e permessi degli utenti. Non sono inclusi nel database solo i log delle build e gli artefatti.

Installazione per Linux
Per l'installazione manuale di TeamCity con il contenitore del servlet Tomcat, utilizzare l'archivio TeamCity: TeamCity .tar.gz. Scaricare .
tar -xfz TeamCity.tar.gz
/bin /runAll. sh [start|stop]
Al primo avvio, è necessario scegliere il tipo di database in cui verranno memorizzati i dati delle build.

La configurazione di default funziona su :8111/ con un agente di build registrato in esecuzione sullo stesso PC.
Punti di forza di TeamCity:
- configurazione semplice;
- interfaccia comoda;
- un gran numero di funzioni integrate;
- servizio clienti;
- è disponibile un'API RESTful;
- documentazione adeguata;
- buona protezione.
Contro:
- integrazione limitata;
- è uno strumento a pagamento;
- una piccola comunità (che, tuttavia, sta crescendo).
GoCD
Progetto open source, per l'installazione e il funzionamento del quale è necessaria la Java Runtime Environment (JRE) versione 8.
Requisiti di sistema:
- RAM — almeno 1 GB, meglio più;
- processore — dual-core, con una frequenza di lavoro di 2 GHz;
- disco rigido — almeno 1 GB di spazio libero.
Agente:
- RAM — minimo 128 MB, meglio più;
- processore — minimo 2 GHz.
Il server gestisce il funzionamento degli agenti e fornisce un'interfaccia utente comoda:

Stages/Jobs/Tasks:

Installazione per Linux
echo “deb /” | sudo tee /etc/apt/sources.list.d/gocd.list
curl | sudo apt-key add —
add-apt-repository ppa:openjdk-r/ppa
apt-get update
apt-get install -y openjdk-8-jre
apt-get install go-server
apt-get install go-agent
/etc/init.d/go-server [start|stop|status|restart]
/etc/init.d/go-agent [start|stop|status|restart]
Per impostazione predefinita, GoCd funziona su :8153.
Punti di forza di GoCd:
- codice sorgente aperto;
- installazione e configurazione semplici;
- ottima documentazione;
- eccellente interfaccia utente:

- possibilità di visualizzare passo-passo il percorso di distribuzione di GoCD in un'unica vista:

- ottima rappresentazione della struttura del pipeline:

- GoCD ottimizza il flusso di lavoro CD nei più richiesti ambienti cloud, tra cui Docker, AWS;
- lo strumento consente di correggere le malfunzionamenti nel pipeline, offrendo il tracciamento di ogni modifica dal commit alla distribuzione in modalità realtime.
Contro:
- è necessario avere almeno un agente;
- non c'è una console per visualizzare tutte le attività eseguite;
- per eseguire ciascun comando è necessario creare un'attività per la configurazione del pipeline;
- per installare un plugin è necessario spostare il file .jar in /plugins/external e riavviare il server;
- una comunità relativamente piccola.
In conclusione
Questi sono solo tre strumenti, in realtà ce ne sono molti di più. È difficile scegliere, quindi è fondamentale prestare attenzione a ulteriori aspetti.
Il codice sorgente aperto dello strumento consente di comprendere cosa rappresenti, oltre a permettere di aggiungere nuove funzionalità più rapidamente. Tuttavia, se qualcosa non funziona, si è costretti a contare solo su se stessi e sull'assistenza della comunità. Gli strumenti a pagamento offrono supporto, che a volte può risultare critico.
Se la sicurezza è la cosa più importante, è meglio utilizzare uno strumento locale. Se non lo è, allora optare per una soluzione SaaS è una buona opzione.
E infine: per garantire un processo di distribuzione continua realmente efficace, è necessario stabilire criteri la cui specificità permetta di ristrettare il cerchio degli strumenti disponibili.
Skillbox consiglia:
- Corso pratico di due anni .
- Corso online .
- Corso pratico annuale .
Fonte: habr.com
