0Pricing
Docker & DevOps Fundamentals · Lezione

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à.

Distribuzione automatizzata con Jenkins — illustrazione 1

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

  1. Introduzione a Jenkins
  2. Creazione di immagini Docker con Jenkins
  3. Distribuzione automatizzata con Jenkins
  4. Pipeline Jenkins come codice con Jenkinsfile
← Torna a Docker & DevOps Fundamentals