1. Apportare modifiche al codice
Come ho già detto prima, lo sviluppo software si riduce a fare piccole modifiche al codice. Questo processo viene svolto da milioni di programmatori da decenni, portando a una sua accurata debug, standardizzazione e formalizzazione in tutti i modi possibili.
Per conservare il codice c’è un programma speciale – Git. Git è un sistema di gestione delle versioni distribuito. Non si limita a conservare il codice, ma traccia tutte le modifiche e aiuta i programmatori a lavorare insieme sui progetti senza disturbarsi 🤝.
Con Git, gli sviluppatori possono creare diverse versioni del progetto (branch), conservare tutta la storia delle modifiche e anche tornare a qualsiasi punto nel passato. È come una macchina del tempo per il codice! Git aiuta a unire le modifiche e risolvere i conflitti, quindi è diventato lo strumento principale per il lavoro di squadra nello sviluppo moderno. 👩💻
2. Compilare il progetto
Prima di testare o caricare il progetto sul server, bisogna compilarlo.
🏗️ Compilare i progetti significa trasformare il codice sorgente del progetto in programmi eseguibili o altri formati avviabili, spesso includendo test e deployment. È un aspetto chiave dello sviluppo software, che garantisce che il programma sia pronto all’uso.
La compilazione non è solo tradurre il codice, anche se spesso fa parte del processo di build. Dopo aver compilato, potresti avere decine o anche centinaia di file da caricare su vari server.
I build tool possono essere di basso livello, come:
- ☕ Maven e Gradle – molto usati nei progetti Java per gestire le dipendenze e la build dei progetti.
- 🐜 Apache Ant – un altro strumento di build per Java, che permette molta flessibilità nella scrittura degli script di build.
- 🖥️ MSBuild – usato per build di progetti creati con Microsoft Visual Studio.
- ⚙️ Make – strumento classico di build, che usa Makefile per definire le regole di compilazione, molto popolare in progetti C e C++.
- 🌐 Webpack – spesso usato per build di applicazioni JavaScript, gestisce dipendenze e moduli.
- 📜 Gulp e Grunt – strumenti che aiutano ad automatizzare task frequenti nello sviluppo web, come minificazione e compilazione SCSS in CSS.
Ci sono anche build tool di alto livello. Ne parleremo più avanti.
3. CI/CD
🔄 CI/CD (Continuous Integration/Continuous Delivery) – metodologia che prevede l’integrazione continua delle modifiche da tutte le branch di sviluppo nella branch principale, con test e deployment automatici. Permette di individuare e correggere rapidamente gli errori, migliorando efficienza e velocità di sviluppo.
Uno dei sistemi CI/CD più diffusi, anche se un po’ datato, è Jenkins. Se lavori in una piccola azienda, c’è circa l’80% di probabilità che usino proprio quello.
🤖 Jenkins – sistema automatizzato molto popolare, usato per CI/CD. Permette di automatizzare le varie fasi dello sviluppo, come build, test e deployment, migliorando qualità del codice e velocità di sviluppo.
Se lavori in una grande azienda, ci sono altri 5 sistemi tra cui scegliere:
- 🚦 TeamCity – potente sistema commerciale di JetBrains. Offre integrazione profonda con vari ambienti di sviluppo e testing.
- 📝 GitLab CI – integrato in GitLab, permette CI/CD configurabile tramite YAML.
- ☁️ CircleCI – servizio cloud di CI/CD, supporta automazione di test e deployment per molti progetti.
- 🦑 Travis CI – uno dei primi servizi cloud di CI, molto usato in progetti open source. Si integra bene con GitHub.
- 🎍 Bamboo – prodotto di Atlassian, si integra strettamente con altri strumenti come Jira e Bitbucket.
Non è necessario saperli tutti – di solito ci sono DevOps specialisti che configurano tutto. Tu devi solo sapere che esistono e capire di cosa si parla se si menziona Jenkins, CI/CD o “continuous integration”.
4. Deployment del progetto sul server
Scrivere il progetto non basta – deve anche arrivare sul server. In generale, il deployment (o deploy) è il processo di mettere e attivare l’applicazione web sul 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, database, dipendenze, e anche le impostazioni di rete e sicurezza 😅.
E tu, pensi che il tuo codice finirà sul server? Qualcuno lo caricherà? O forse ti collegherai via SSH a un server remoto, caricherai qualche file e configurerai tutto? Relax: ora non si fa più così. Ora c’è Docker.
🐳 Docker – piattaforma per sviluppo, delivery e run di applicazioni tramite container. Docker semplifica la creazione, il deployment e l’esecuzione di app, impacchettandole con tutte le dipendenze e l’ambiente in un’unica unità compatta. Garantisce coerenza tra ambienti di sviluppo, test e produzione.
Docker permette di impacchettare il progetto o più progetti in Docker container. È come una macchina virtuale.
Anche se su molti forum Docker ti diranno che è “come una VM”, puoi pensare a Docker container come a una macchina virtuale, ma molto più leggera.
In sostanza, Docker container è una “virtual machine” virtuale. Le VM sono copie complete di sistema operativo, kernel e hardware virtuale, mentre i Docker container condividono il kernel dell’host e sono più leggeri e veloci ⚡.
Il deploy con Docker rende tutto più semplice, rapido e affidabile. Il progetto si impacchetta in Docker container, facilmente spostabili e eseguibili su qualsiasi sistema che supporti Docker 🚢.
Questo elimina i problemi di differenze tra ambienti server e permette di scalare facilmente aggiungendo o rimuovendo container in base al carico. Tutti usano Docker – è molto comodo e molto semplice.
GO TO FULL VERSION