CodeGym /Corsi /JAVA 25 SELF /Deployment del codice sul server

Deployment del codice sul server

JAVA 25 SELF
Livello 10 , Lezione 6
Disponibile

1. Apportiamo modifiche al codice

Come ho già detto in precedenza, lo sviluppo software si riduce all’apportare piccole modifiche al codice. Milioni di programmatori svolgono questo processo da decenni, il che ha portato alla sua accurata messa a punto, standardizzazione e formalizzazione in tutti i modi possibili.

Per conservare il codice esiste un programma specifico – Git. Git è un sistema di controllo versione distribuito. Non si limita a conservare il codice, ma tiene traccia di tutte le modifiche e aiuta gli sviluppatori a lavorare insieme ai progetti senza intralciarsi a vicenda 🤝.

Con Git gli sviluppatori possono creare diverse versioni del progetto (rami), conservare la cronologia completa delle modifiche e persino tornare a qualsiasi momento del passato. È come una macchina del tempo per il codice! Git aiuta a unire le modifiche e a risolvere i conflitti, perciò è diventato lo strumento principale per il lavoro di squadra nello sviluppo moderno. 👩‍💻

2. Eseguiamo la build del progetto

Prima di testare un progetto o caricarlo su un server, è necessario eseguirne la build.

🏗️ La build di un progetto è il processo di compilazione del codice sorgente in programmi eseguibili o altri formati avviabili, spesso includendo test e deployment. È un aspetto chiave dello sviluppo software, che garantisce la prontezza del programma all’uso.

La build non è solo compilazione, anche se la compilazione è spesso parte del processo di build. Al termine della build potresti ritrovarti con decine o persino centinaia di file da caricare su vari server.

I tool di build possono essere di basso livello, come:

  • Maven e Gradle – ampiamente utilizzati nei progetti Java per la gestione delle dipendenze e la build.
  • 🐜 Apache Ant – un altro strumento di build per progetti Java, offre grande flessibilità nella scrittura di script di build.
  • 🖥️ MSBuild – usato per la build di progetti creati con Microsoft Visual Studio.
  • ⚙️ Make – strumento classico di build, utilizza il Makefile per definire le regole di build, particolarmente popolare nei progetti in C e C++.
  • 🌐 Webpack – spesso usato per la build di applicazioni JavaScript, gestendo dipendenze e moduli.
  • 📜 Gulp e Grunt – strumenti che aiutano ad automatizzare le attività ricorrenti nello sviluppo di applicazioni web, come la minificazione dei file e la compilazione da SCSS a CSS.

Esistono anche strumenti di build ad alto livello. Ne parleremo più sotto.

3. CI/CD

🔄 CI/CD (Continuous Integration/Continuous Delivery) – una metodologia che prevede l’integrazione continua delle modifiche da tutti i rami di sviluppo nel ramo principale, nonché il testing e il deployment automatici di tali modifiche. Questo consente di individuare e correggere rapidamente gli errori, aumentando l’efficienza e la velocità di sviluppo.

Uno dei sistemi CI/CD più diffusi, sebbene un po’ datato, è Jenkins. Se lavori in una piccola azienda, con una probabilità dell’80 % useranno proprio questo.

🤖 Jenkins – un sistema di automazione molto popolare usato per integrazione e consegna continue (CI/CD). Jenkins consente di automatizzare varie fasi dello sviluppo software, incluse build, test e deployment, migliorando la qualità del codice e accelerando il processo di sviluppo.

Se entri in una grande azienda, potrebbero esserci altre 5 opzioni:

  • 🚦 TeamCity – un potente sistema commerciale di JetBrains. Offre un’integrazione profonda con vari ambienti di sviluppo e testing.
  • 📝 GitLab CI – parte integrata di GitLab, offre integrazione e consegna continue con configurazione tramite file YAML.
  • ☁️ CircleCI – servizio CI/CD cloud, supporta l’automazione di test e deployment per numerosi progetti.
  • 🦑 Travis CI – uno dei primi servizi CI in cloud, utilizzato in molti progetti open source. Si integra bene con GitHub.
  • 🎍 Bamboo – prodotto di Atlassian, si integra strettamente con altri strumenti di questa azienda, come Jira e Bitbucket.

Non è necessario conoscerli a fondo né saperci lavorare – in genere in azienda ci sono specialisti DevOps che configurano tutti questi processi. Ti basta sapere che esistono e capire di cosa si parla se in una conversazione vengono menzionati Jenkins, CI/CD o «continuous integration».

4. Distribuiamo il progetto sul server

Scrivere il progetto non basta – deve anche finire sul tuo server. In generale, il deployment (deploy) di un progetto su un server è il processo di pubblicazione e attivazione di un’applicazione web su un server in modo che sia accessibile agli utenti tramite Internet 🚚.

Questo processo include il trasferimento dei file del progetto sul server, la configurazione dell’ambiente server, dei database e delle dipendenze, nonché la configurazione delle impostazioni di rete e della sicurezza 😅.

E secondo te, come ci arriva il tuo codice sul server? Qualcuno lo caricherà a mano? Oppure ti connetterai via SSH al server remoto, caricherai un paio di file e imposterai tutto manualmente? Rilassati: non lo fa più nessuno. Ora c’è Docker.

🐳 Docker – è una piattaforma per sviluppare, distribuire ed eseguire applicazioni tramite container. Docker semplifica la creazione, il deployment e l’esecuzione delle applicazioni, impacchettandole insieme a tutte le dipendenze e all’ambiente in un unico oggetto compatto. Questo garantisce la coerenza dell’ambiente in tutte le fasi: dallo sviluppo al testing e alla produzione.

Docker consente di impacchettare il tuo progetto o più progetti in un container Docker. È qualcosa di simile a una macchina virtuale.

E anche se su qualsiasi forum dedicato a Docker ti sommergeranno di critiche se lo chiami «macchina virtuale», si può pensare al container Docker proprio come a una macchina virtuale. Solo molto più leggera.

In sostanza, un container Docker è una «macchina virtuale» virtuale. Le macchine virtuali includono una copia completa del sistema operativo, del kernel del sistema operativo e dell’hardware virtuale, mentre i container Docker condividono il kernel dell’host e possono essere più leggeri e veloci .

Il deployment di un progetto con Docker semplifica molto il processo, garantendo velocità e affidabilità. Il progetto viene impacchettato in container Docker che si possono spostare ed eseguire facilmente su qualsiasi sistema che supporti Docker 🚢.

Questo elimina i problemi dovuti alle differenze tra ambienti server e consente di scalare facilmente l’applicazione, aggiungendo o rimuovendo container in base al carico. Tutti sono passati a Docker – è molto comodo e molto semplice.

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION