Distribuzione automatizzata con Jenkins
Crei una pipeline CI/CD in Jenkins per distribuire i container Docker in un ambiente di destinazione.
Distribuzione automatizzata con Jenkins è una lezione Docker & DevOps Fundamentals gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Docker & DevOps Fundamentals, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Docker & DevOps Fundamentals include 4 lezioni in totale.
Introduzione al deployment automatico
Benvenuto alla lezione finale su CI/CD con Jenkins e Docker! Oggi ci concentreremo sull'automazione del deployment dei container Docker.
Il deployment automatico è il processo di rilascio del software negli ambienti di produzione o staging senza intervento manuale. È una parte fondamentale della Continuous Delivery e della Continuous Deployment, perché garantisce velocità, uniformità e affidabilità.

Perché automatizzare il deployment
Il deployment manuale delle applicazioni può essere lento, soggetto a errori e incoerente. L'automazione affronta queste difficoltà:
- Velocità: distribuire rapidamente nuove funzionalità o correzioni.
- Affidabilità: ridurre gli errori umani mediante processi standardizzati.
- Coerenza: assicurarsi che ogni deployment segua gli stessi passaggi.
- Efficienza: permettere agli sviluppatori di concentrarsi sul codice invece che sulle attività di deployment.
Fasi della pipeline di deployment
Una tipica pipeline Jenkins per il deployment Docker comprende diverse fasi fondamentali:
- Build: creare l'immagine Docker, come illustrato nelle lezioni precedenti.
- Test: eseguire test automatici sull'immagine.
- Push: eseguire il push dell'immagine in un Docker Registry.
- Deploy: scaricare l'immagine dal registry ed eseguirla su un server di destinazione.
- Verify: confermare che il nuovo deployment sia funzionante.
Oggi ci concentreremo sulle fasi «Deploy» e «Verify».
Configurazione dell'ambiente di destinazione
Prima che Jenkins possa eseguire il deployment, il server di destinazione deve essere pronto. In genere questo significa:
- Docker Installed: sul server di destinazione deve essere installato Docker Engine.
- SSH Access: Jenkins deve poter accedere in modo sicuro al server di destinazione tramite Secure Shell (SSH).
- User Permissions: l'utente SSH deve disporre delle autorizzazioni per eseguire comandi Docker.
In genere gestiamo le credenziali SSH in modo sicuro all'interno di Jenkins.
Credenziali SSH per Jenkins
Per connettersi a un server remoto, Jenkins utilizza credenziali SSH. In genere si tratta di coppie composte da nome utente SSH e chiave privata, archiviate in modo sicuro nel gestore delle credenziali di Jenkins.
Quando si definisce una pipeline, è possibile indicare a Jenkins di utilizzare queste credenziali per fasi specifiche, consentendogli di eseguire comandi sul server di destinazione.
Esempio di script di deployment di base
Ecco un semplice shell script che potrebbe essere eseguito su un server di destinazione per aggiornare un container Docker. Arresta il container precedente, lo rimuove, scarica la nuova immagine e la esegue.
APP_NAME e IMAGE_NAME verrebbero passate come variabili d'ambiente.
#!/bin/bash
# Stop and remove existing container
docker stop ${APP_NAME} || true
docker rm ${APP_NAME} || true
# Pull the new Docker image
docker pull ${IMAGE_NAME}
# Run the new container
docker run -d --name ${APP_NAME} -p 80:80 ${IMAGE_NAME}
echo "Deployment of ${APP_NAME} complete!"Integrazione con la Jenkins Pipeline
In un Jenkinsfile, è possibile utilizzare il plugin sshPublisher oppure un semplice passaggio sh con il forwarding dell'agent SSH per eseguire comandi su un host remoto. Ecco come potrebbe apparire una fase di deployment che utilizza un passaggio sh di base, supponendo che SSH sia configurato.
agent { label 'remote-deploy-host' } significa che questa fase viene eseguita sul server di destinazione.
stage('Deploy to Production') {
agent { label 'remote-deploy-host' }
steps {
withEnv([
"APP_NAME=my-webapp",
"IMAGE_NAME=myregistry/my-webapp:latest"
]) {
sh '''
docker stop ${APP_NAME} || true
docker rm ${APP_NAME} || true
docker pull ${IMAGE_NAME}
docker run -d --name ${APP_NAME} -p 80:80 ${IMAGE_NAME}
echo "Deployment successful!"
'''
}
}
}Realizzazione di aggiornamenti rolling
Per eseguire deployment senza downtime, un semplice arresto e riavvio non è sufficiente. In genere si utilizza una strategia come una delle seguenti:
- Rolling Update: sostituire gradualmente i vecchi container con quelli nuovi, uno alla volta, garantendo la disponibilità del servizio.
- Blue/Green Deployment: eseguire il deployment della nuova versione (Green) accanto a quella precedente (Blue), quindi spostare il traffico.
Sebbene Jenkins possa orchestrare queste strategie, strumenti come Docker Swarm o Kubernetes offrono supporto nativo per strategie più avanzate.
Verifica del deployment
Dopo il deployment, è fondamentale verificare che l'applicazione funzioni correttamente. Questa verifica può comprendere:
- Health Checks: semplici richieste HTTP GET all'endpoint di health check dell'applicazione.
- Log Monitoring: controllare i log del container per individuare eventuali errori.
- Integration Tests: eseguire una serie rapida di test sulla versione appena distribuita.
La pipeline Jenkins può includere una fase «Verify» per automatizzare questi controlli.
Verifica delle conoscenze
Consideri il seguente frammento di Jenkinsfile relativo a una fase di deployment. Qual è lo scopo principale di docker stop ${APP_NAME} || true?
Riepilogo: deployment automatico
Ottimo lavoro! Ha imparato come affrontare il deployment automatico con Jenkins e Docker.
- Il deployment automatico garantisce rilasci rapidi, affidabili e coerenti.
- Gli ambienti di destinazione devono disporre di Docker e dell'accesso SSH.
- Jenkins utilizza credenziali sicure per connettersi ai server remoti.
- Gli script di deployment in genere arrestano i vecchi container, scaricano le nuove immagini e avviano i nuovi container.
- Le fasi di verifica sono fondamentali per confermare che il deployment sia riuscito.
Con questo si conclude il corso CI/CD con Jenkins e Docker. Continui a esercitarsi per padroneggiare questi potenti strumenti.
Domande Frequenti
La lezione «Distribuzione automatizzata con Jenkins» è gratuita?
Sì — il testo completo di «Distribuzione automatizzata con Jenkins» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Docker & DevOps Fundamentals, passa a CoddyKit PRO. Il corso Docker & DevOps Fundamentals include 4 lezioni in totale.
Cosa imparerò in «Distribuzione automatizzata con Jenkins»?
Crei una pipeline CI/CD in Jenkins per distribuire i container Docker in un ambiente di destinazione. Eserciti Docker & DevOps Fundamentals con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Docker & DevOps Fundamentals?
Non è richiesta alcuna esperienza precedente. Docker & DevOps Fundamentals su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Distribuzione automatizzata con Jenkins»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Docker & DevOps Fundamentals?
Sì. Ogni lezione Docker & DevOps Fundamentals include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Introduzione a Jenkins
- Creazione di immagini Docker con Jenkins
- Distribuzione automatizzata con Jenkins
- Pipeline Jenkins come codice con Jenkinsfile