Impostazione di una pipeline CI/CD per le distribuzioni cloud

La distribuzione rapida di software è importante per l'esecuzione efficiente delle tue applicazioni nel cloud. Jenkins è un prodotto molto diffuso per l'automazione delle pipeline Ccontinuous Iintegration (CI) e Continuous Deployment (CD) per i carichi di lavoro in Oracle Cloud.

Architettura

In questa architettura di riferimento, Jenkins è ospitato su Oracle Cloud Infrastructure per centralizzare l'automazione della build e ridimensionare la distribuzione. Il processo di integrazione continua crea un'applicazione e la distribuisce utilizzando Oracle Cloud Infrastructure Registry (OCIR) e Container Engine for Kubernetes (OKE). GitHub viene utilizzato per gestire il codice sorgente.

GitHub fornisce l'integrazione dell'hook Web, pertanto Jenkins avvia l'esecuzione di build e test automatici dopo ogni check-in del codice. Un'applicazione Web di esempio viene distribuita come parte della pipeline CI/CD, a cui gli utenti finali possono accedere dal cluster Container Engine for Kubernetes. Per semplificare il processo, Terraform viene utilizzato per l'automazione dell'infrastruttura.

In questa architettura di riferimento, Terraform utilizza un modulo Terraform in grado di distribuire Jenkins in diverse configurazioni, da una singola VM Jenkins a una configurazione del nodo controller (server) e agente (worker). Ciò significa che il modulo Jenkins può essere incorporato in altre distribuzioni dell'architettura per use case non Kubernetes (ad esempio, sviluppo di applicazioni APEX, WebLogic sulle VM e così via).

La configurazione dell'agente indica che l'ambiente può essere riconfigurato per fornire un numero diverso di istanze di computazione che riflettono i requisiti del carico di lavoro. Ciò include la possibilità di sostituire le VM agente per evitare problemi di accumulo di vecchie dipendenze, conflitti di dipendenza transitori e build che utilizzano dipendenze non dichiarate.

I nodi VM su cui è in esecuzione Jenkins sono configurati utilizzando un'immagine VM predefinita pregenerata con tutto il software necessario per supportare Jenkins.

Il seguente diagramma illustra questa architettura di riferimento.

Segue descrizione di cicd-oci.png
Descrizione dell'immagine cicd-oci.png

cicd-oci-oracle.zip

Questa architettura contiene i componenti riportati di seguito.
  • Area

    Un'area Oracle Cloud Infrastructure è un'area geografica localizzata che contiene uno o più data center, denominati domini di disponibilità. Le regioni sono indipendenti da altre regioni, e vaste distanze possono separarle (tra paesi o addirittura continenti).

  • Domini di disponibilità

    I domini di disponibilità sono data center indipendenti e autonomi all'interno di un'area. Le risorse fisiche in ogni dominio di disponibilità vengono isolate dalle risorse negli altri domini di disponibilità, il che fornisce tolleranza di errore. I domini di disponibilità non condividono infrastrutture quali l'alimentazione o il raffreddamento o la rete di dominio di disponibilità interna. È quindi improbabile che un errore a un dominio di disponibilità influenzi gli altri domini di disponibilità nell'area.

  • Rete cloud virtuale (VCN) e subnet

    Jenkins viene eseguito su un'istanza di calcolo VM (Virtual Machine) distribuita in un VCN che è possibile segmentare in subnet. Jenkins è ospitato nella subnet pubblica regionale A e Container Engine for Kubernetes è distribuito nella subnet pubblica regionale B.

  • Istanza di computazione

    Jenkins viene distribuito in una VM dell'istanza di calcolo. Il cluster Container Engine for Kubernetes esegue anche i nodi sulle istanze di calcolo.

  • Container Engine for Kubernetes

    Container Engine for Kubernetes è un servizio completamente gestito, scalabile e altamente disponibile che è possibile utilizzare per distribuire le applicazioni containerizzate nel cloud. Specificare le risorse di calcolo richieste dalle applicazioni e Container Engine for Kubernetes eseguirne il provisioning su Oracle Cloud Infrastructure in una tenancy esistente.

  • Registro

    Registry è un registro gestito da Oracle che consente di semplificare lo sviluppo del workflow di produzione. Registry semplifica la memorizzazione, la condivisione e la gestione degli artifact di sviluppo come le immagini di Docker da parte dello sviluppatore.

  • Jenkins

    Jenkins è un server di automazione open source che consente agli sviluppatori di creare, testare e distribuire in modo affidabile il software. Jenkins supporta la modalità master/agent, in cui il carico di lavoro della creazione di progetti viene delegato a più nodi agente dal master. Un'unica installazione di Jenkins può ospitare più progetti o fornire ambienti diversi per build e test.

Suggerimenti

I requisiti potrebbero essere diversi dall'architettura descritta qui. Utilizzare come punto di inizio i suggerimenti riportati di seguito.

  • Forme di calcolo

    Questa architettura utilizza un'immagine del sistema operativo Oracle Linux con la forma VM.Standard2.1 per ospitare sia il server Jenkins che i nodi cluster Container Engine for Kubernetes. Se l'applicazione richiede più memoria o core, è possibile scegliere una forma diversa.

  • VCN

    Quando si crea un VCN, determinare il numero di blocchi CIDR richiesti e la dimensione di ogni blocco in base al numero di risorse che si prevede di associare alle subnet in VCN. Utilizzare blocchi CIDR che si trovano all'interno dello spazio degli indirizzi IP privati standard.

    Dopo aver creato un VCN, è possibile modificare, aggiungere e rimuovere i relativi blocchi CIDR.

    Questa architettura utilizza un VCN pubblico per ospitare Container Engine for Kubernetes. È inoltre possibile utilizzare un VCN privato. In tal caso, utilizzare un gateway NAT per concedere l'accesso al cluster tramite Internet pubblico.

  • Jenkins

    Questa architettura distribuisce Jenkins su un'istanza di computazione. Un nodo principale di Jenkins viene utilizzato per creare la pipeline CI/CD. Se si dispone di più pipeline da creare ed eseguire in parallelo, è possibile utilizzare un nodo agente Jenkins per sviluppare più pipeline.

  • Container Engine for Kubernetes

    Questa architettura distribuisce il cluster Container Engine for Kubernetes. I nodi lavoratore vengono distribuiti su un sistema operativo VM.Standard2.1 Oracle Linux. Questa architettura utilizza tre nodi lavoratore nel cluster, ma è possibile creare fino a 1000 nodi su ciascun cluster.

  • Registro

    Questa architettura distribuisce Registry come registro Docker privato per uso interno. Le immagini di Docker vengono sottoposte a push e estratte dal registro. È inoltre possibile utilizzare Registry come registro Docker pubblico, consentendo a qualsiasi utente con accesso a Internet e conoscenza dell'URL appropriato di estrarre le immagini dai repository pubblici in Oracle Cloud.

Considerazioni

  • Scalabilità

    È possibile ridimensionare l'applicazione aggiornando il numero di nodi lavoratore nel cluster Container Engine for Kubernetes, a seconda del carico. È inoltre possibile eseguire lo scale in riducendo il numero di nodi lavoratore nel cluster. Quando si crea un servizio sul cluster, è possibile creare un load balancer per distribuire il traffico tra i nodi assegnati a tale servizio. Per Jenkins è possibile utilizzare il nodo principale di Jenkins per creare più agenti per più pipeline.

  • Disponibilità delle applicazioni

    I domini di errore forniscono la migliore resilienza all'interno di un singolo dominio di disponibilità. È possibile distribuire istanze di calcolo che eseguono gli stessi task in più domini di disponibilità. Questa progettazione rimuove un singolo punto di errore introducendo ridondanza.

  • Gestibilità

    Questa architettura utilizza un'applicazione Web di esempio ospitata in GitHub per il controllo dell'origine. Il registro viene utilizzato nella pipeline di build per memorizzare l'immagine di build di Docker per l'applicazione.

  • Sicurezza

    Utilizzare i criteri per limitare chi può accedere alle risorse Oracle Cloud Infrastructure di cui dispone l'azienda e come.

    Container Engine for Kubernetes è integrato con Oracle Cloud Infrastructure Identity and Access Management (IAM), che fornisce una facile autenticazione con funzionalità di identità Oracle Cloud Infrastructure nativa.

Distribuire

Il codice richiesto per distribuire questa architettura di riferimento è disponibile in GitHub. È possibile estrarre il codice in Oracle Cloud Infrastructure Resource Manager con un solo clic, creare lo stack e distribuirlo. In alternativa, scaricare il codice da GitHub nel computer, personalizzare il codice e distribuire l'architettura utilizzando Terraform CLI.

  • Distribuisci utilizzando Oracle Cloud Infrastructure Resource Manager:
    1. Fare clic su Distribuisci in Oracle Cloud

      Se non si è già connessi, immettere la tenancy e le credenziali utente.

    2. Rivedere e accettare i termini e le condizioni.
    3. Selezionare l'area in cui distribuire lo stack.
    4. Seguire i prompt visualizzati e le istruzioni per creare lo stack.
    5. Dopo aver creato lo stack, fare clic su Azioni Terraform e selezionare Piano.
    6. Attendere il completamento del job e rivedere il piano.

      Per apportare modifiche, tornare alla pagina Dettagli stack, fare clic su Modifica stack e apportare le modifiche desiderate. Eseguire di nuovo l'azione Piano.

    7. Se non sono necessarie ulteriori modifiche, tornare alla pagina Dettagli stack, fare clic su Azioni Terraform e selezionare Applica.
  • Distribuire utilizzando Terraform CLI:
    1. Andare a GitHub.
    2. Scaricare o duplicare il codice nel computer locale.
    3. Seguire le istruzioni riportate in README.md.

Log delle modifiche

Questo log elenca le modifiche significative: