12.1 Facciamo modifiche al codice
Come detto sopra, tutto lo sviluppo moderno riguarda l'apportare piccole modifiche al codice. Questo è ciò che fanno milioni di programmatori da decenni, quindi questo processo è già stato perfezionato, standardizzato e formalizzato in tutti i modi possibili.
Per cominciare, per conservare il codice c'è un programma speciale: Git. Git è un sistema di controllo versione distribuito utilizzato per tracciare le modifiche nel codice e coordinare il lavoro dei programmatori su progetti condivisi.
Git permette agli sviluppatori di creare ramificazioni nel progetto, mantenendo l'intera cronologia delle modifiche e la possibilità di tornare a qualsiasi stato del file. Questo garantisce un'efficace fusione delle modifiche e la risoluzione dei conflitti, rendendo Git uno strumento fondamentale per il lavoro collettivo sul codice nello sviluppo moderno del software.
In secondo luogo, anche il processo di modifica del codice è standardizzato. Di solito per ogni nuova funzionalità crei un nuovo branch in Git, apporti le tue modifiche sotto forma di una serie di commit e poi invii una Pull Request al tuo team leader o collega per eseguire il Code Review e approvare le tue modifiche.
Se tutto va bene, le tue modifiche vengono integrate nel branch dev, viene avviata una build automatica del progetto e i test. Molti test.
12.2 Compiliamo il progetto
Prima di testare o caricare il progetto sul server, bisogna compilarlo.
La compilazione di progetti è il processo di compilazione del codice sorgente del progetto in programmi eseguibili o altri formati avviabili, spesso con l'inclusione di test e distribuzione. È un aspetto chiave dello sviluppo software, garantendo che il programma sia pronto per l'uso.
La compilazione non è la stessa cosa della sola compilazione, ma la compilazione è spesso parte del processo di compilazione. Dopo aver completato la compilazione, spesso avrai decine o persino centinaia di file da caricare su vari server.
I compilatori possono essere di basso livello:
Maven e Gradle sono ampiamente utilizzati nei progetti Java per gestire le dipendenze e compilare i progetti.
Apache Ant è un altro strumento per compilare progetti Java, offre grande flessibilità nello scrivere script di compilazione.
MSBuild è utilizzato per compilare progetti creati con Microsoft Visual Studio.
Make è un classico strumento di compilazione che utilizza Makefile per definire le regole di compilazione, particolarmente popolare nei progetti C e C++.
Webpack è spesso usato per compilare applicazioni JavaScript, gestendo dipendenze e moduli.
Gulp e Grunt sono strumenti che aiutano ad automatizzare compiti frequenti nello sviluppo web, come la minificazione dei file e la compilazione di SCSS in CSS.
I compilatori possono essere anche di alto livello. Di questi parleremo di seguito.
12.3 CI/CD
CI/CD (Continuous Integration/Continuous Delivery) è una metodologia che prevede la fusione continua delle modifiche da tutti i branch di sviluppo nel branch principale e il test e la distribuzione automatici di queste modifiche. Questo consente di identificare e correggere rapidamente gli errori, aumentando l'efficienza e la velocità dello sviluppo.
Uno dei sistemi CI/CD più comuni, anche se un po' datato, è Jenkins. Se lavori in una piccola azienda, lo utilizzeranno con una probabilità dell'80%.
Jenkins è un sistema automatizzato popolare utilizzato per l'integrazione continua e la consegna (CI/CD). Jenkins consente di automatizzare varie fasi dello sviluppo software, compresa la compilazione, il test e la distribuzione, migliorando la qualità del codice e accelerando il processo di sviluppo.
Se ti trovi in una grande azienda, potresti avere altre 5 opzioni tra cui scegliere:
TeamCity è un potente sistema commerciale di JetBrains che offre un'integrazione profonda con vari ambienti di sviluppo e test.
GitLab CI è una parte integrata di GitLab, fornisce integrazione continua e distribuzione con la possibilità di configurare attraverso file YAML.
CircleCI è un servizio CI/CD cloud che supporta l'automazione dei test e della distribuzione per molti progetti.
Travis CI è uno dei primi servizi CI cloud, utilizzato in molti progetti open source, ben integrato con GitHub.
Bamboo è un prodotto di Atlassian, strettamente integrato con altri strumenti di questa azienda, come Jira e Bitbucket.
Non è necessario conoscerli e saperci lavorare: di solito in azienda c'è uno specialista DevOps che configura tutti questi processi di build. Devi solo sapere che esistono e capire di cosa si parla se in una conversazione viene menzionato Jenkins, CI/CD o "continuous integration".
12.4 Distribuiamo il progetto sul server
Non basta scrivere il progetto, deve anche essere sul tuo server. In generale, il deploy di un progetto sul server è il processo di collocamento e attivazione di un'applicazione web su un server in modo che sia accessibile agli utenti via internet.
Questo include il trasferimento dei file del progetto sul server, la configurazione dell'ambiente server, i database, le dipendenze, oltre alla configurazione delle impostazioni di rete e sicurezza.
E come pensi che il tuo codice arriverà sul server? Qualcuno lo caricherà lì? O forse ti connetterai tramite SSH al server remoto, caricherai un paio di file e configurerai tutto? Rilassati: nessuno lo fa più così. Ora c'è Docker.
Docker è una piattaforma per lo sviluppo, la consegna e l'esecuzione di applicazioni tramite la containerizzazione. Docker facilita la creazione, la distribuzione e l'esecuzione di applicazioni utilizzando i container, che consentono di impacchettare l'applicazione con tutto il suo ambiente e le dipendenze in un unico oggetto compatto, garantendo la coerenza dell'ambiente in tutte le fasi di sviluppo, test e produzione.
Docker ti permette di impacchettare il tuo progetto o progetti in un container Docker. È un po' come una macchina virtuale, solo molto leggera.
E anche se su qualsiasi forum dedicato a Docker, se lo chiami una macchina virtuale, ti lanceranno contro delle scarpe, ma se sai cos'è una macchina virtuale, puoi pensare a un container Docker come a una macchina virtuale. Solo molto leggera.
In sostanza, un container Docker è una "macchina virtuale" virtuale. Le macchine virtuali includono una copia completa del sistema operativo, del kernel OS e dell'hardware virtuale, mentre i container Docker condividono il kernel dell'host e possono essere più leggeri e veloci.
E il deploy di un progetto con Docker semplifica notevolmente il processo di distribuzione delle applicazioni, garantendo velocità e affidabilità. Il progetto viene impacchettato in container Docker, che possono essere facilmente spostati e avviati su qualsiasi sistema che supporta Docker.
Questo elimina i problemi legati alle differenze negli ambienti server e permette di scalare facilmente l'applicazione, aggiungendo o rimuovendo container in base al carico. Tutti sono passati a Docker — è molto comodo e molto semplice.
GO TO FULL VERSION