Nota

Usa Oracle Cloud Infrastructure DevOps per automatizzare le distribuzioni di OCI Resource Manager

Introduzione

Oracle Cloud Infrastructure (OCI) Resource Manager è un servizio completamente gestito che aiuta i team a gestire e automatizzare la propria Infrastructure as Code (IaC). Consente ai team di collaborare alla configurazione di Terraform, definire le autorizzazioni per varie azioni, fornire il blocco dello stato per prevenire il danneggiamento, memorizzare automaticamente tutti i file di stato nello storage persistente e si occupa della configurazione del provider Terraform. Per la distribuzione e l'implementazione di tutto il software, non solo Terraform, esiste OCI DevOps, una piattaforma di integrazione/consegna continua (CI/CD) end-to-end per gli sviluppatori con repository di codici privati, trigger, pipeline di build e distribuzione e altro ancora.

OCI Resource Manager ha integrato l'automazione per Terraform e le integrazioni con più sistemi di controllo del codice sorgente per ottenere CI/CD di base. In questa esercitazione esamineremo come utilizzare OCI DevOps per espandere queste funzionalità CI/CD ridistribuendo automaticamente gli stack di Resource Manager OCI sulle modifiche al codice Terraform.

Il flusso

Diagramma di flusso

Il processo inizia con un utente che esegue il push di una nuova configurazione Terraform nel repository di codici, il che attiva le pipeline di build e distribuzione. Ciò si traduce nella creazione di un ambiente shell che utilizza l'interfaccia CLI (Command Line Interface) OCI per applicare lo stack di Resource Manager OCI alla nuova configurazione.

Obiettivi

Task 1: impostare il repository di codici DevOps OCI

  1. Eseguire il login a OCI Console, passare a Developer Services, DevOps, Projects e creare un progetto DevOps che conterrà tutte le risorse nel flusso di lavoro CI/CD.

  2. Creare un repository di codici e caricare la configurazione Terraform. Sono disponibili numerosi modelli forniti da Oracle che è possibile utilizzare. In questa esercitazione Terraform modifica semplicemente la descrizione di un argomento Notifiche OCI.

    resource "oci_ons_notification_topic" "test_notification_topic" {
        #Required
        compartment_id = <compartment_id>
        name = "RM_DevOps_Automation_Tutorial"
    
        #Optional
        description = "This is a test notification topic."
    }
    

    Configurazione delle notifiche iniziali

Task 2: Creare un artifact shell

È necessario creare prima l'artifact utilizzato nella pipeline di distribuzione. Poiché verrà eseguito uno script shell per eseguire l'interfaccia CLI OCI, creare un artifact di tipo Specifica comando. In questa esercitazione verrà utilizzata l'origine artifact per essere In linea con i seguenti comandi:

version: 0.1
component: command
timeoutInSeconds: 1200
steps:
 - type: Command
   timeoutinSeconds: 900
   name: Invoke RMS
   command: |
     echo "Running RM apply command"

Crea artifact shell

Per ulteriori informazioni sulla sintassi e su ulteriori parametri, vedere Documentazione sulla specifica del comando. Aggiungeremo ulteriori dettagli a questo script più tardi.

Task 3: creare una pipeline di distribuzione

Le pipeline di distribuzione vengono utilizzate per distribuire gli artifact.

  1. Creare una pipeline di distribuzione e una fase di tipo Shell.

    Crea stadio shell

  2. Fare clic su Seleziona artifact e selezionare l'artifact creato nel task 2. Selezionare la forma e la configurazione di rete che soddisfano i requisiti.

    Seleziona artifact

    Nota: criteri: quando si creano fasi, verrà collegata una lista di criteri consigliati. Assicurarsi di aggiungerli. Inoltre, la nostra pipeline di distribuzione interagirà con OCI Resource Manager e OCI Notifications, quindi assicurati di concedere al tuo gruppo dinamico l'accesso a ons-topics, orm-stacks e orm-jobs. Per ulteriori informazioni su una lista completa di autorizzazioni per ogni servizio, vedere Riferimento ai criteri.

Task 4: creare una pipeline di build

Anche se non verranno creati artifact, è comunque necessaria una pipeline di build per attivare la pipeline di distribuzione.

  1. Creare una pipeline di build e una fase di tipo Distribuzione trigger.

    Crea fase di build

  2. Fare clic su Seleziona pipeline di distribuzione e selezionare la pipeline creata nel task 3.

    Seleziona pipeline di distribuzione

Task 5: Crea un trigger

È necessario creare un trigger che richiami al push del codice.

  1. Passare a Trigger e fare clic su Crea trigger.

  2. Nella pagina Crea trigger, immettere le informazioni riportate di seguito.

    • Connessione di origine: immettere il repository di codici OCI.
    • Seleziona repository di codici: selezionare il repository creato nel task 1.
  3. Fare clic su Aggiungi azione e immettere le informazioni seguenti.

    • Genera pipeline: selezionare la pipeline di build creata nel task 4.
    • Evento: selezionare Push.
    • Condizioni di esecuzione build: immettere le condizioni in base al caso d'uso. In questo esempio verranno inserite le informazioni riportate di seguito.
      • Ramo di origine: immettere principale.
      • File da includere: immettere main.tf.

    Crea trigger

Task 6: eseguire il test del flusso

Ecco il flusso di lavoro che abbiamo seguito fino a questo punto nel tutorial.

  1. Push codice.
  2. Trigger.
  3. Pipeline di build.
  4. Pipeline di distribuzione.
  5. Lo script shell esegue echo "Running RM apply command".

Confermare il funzionamento del flusso di lavoro prima di aggiungere maggiore complessità allo script shell.

  1. Inserire un nuovo codice.

    Codice push

  2. Confermare l'attivazione della pipeline di build.

    Creazione in corso

  3. Confermare l'attivazione della pipeline di distribuzione.

    Distribuzione in corso

  4. Conferma esecuzione dello script shell riuscita

    Verifica del flusso riuscita

Tutto funziona come previsto. L'ultimo compito è rimodellare il nostro script shell per attivare lo stack di Resource Manager.

Task 7: Modifica script shell per attivare stack Resource Manager

Il runtime delle immagini del contenitore dell'area intermedia della shell include interpreti della shell, utility della shell, interfacce CLI e molti altri strumenti. Per ulteriori informazioni, vedere Dettagli runtime immagine contenitore shell.

Utilizzeremo l'interfaccia CLI OCI per richiamare Resource Manager. Il nostro script shell è simile al seguente:

version: 0.1
component: command
timeoutInSeconds: 1200
steps:
 - type: Command
   timeoutinSeconds: 900
   name: Invoke RMS
   command: |
     echo "Running RM apply command"

Per modificare lo script della shell, procedere come segue:

  1. creare un job.

    La prima chiamata che faremo è create-apply-job. In questo modo viene creato un job di applicazione nello stack di Resource Manager. Verrà inoltre salvato il file job_id del job come variabile per fare riferimento al job nel passo successivo.

    job_id=$(oci resource-manager job create-apply-job --stack-id <Stack OCID> --execution-plan-strategy AUTO_APPROVED --wait-for-state SUCCEEDED --wait-for-state FAILED --query data.id --raw-output)
    

    Per ulteriori informazioni, vedere Riferimento ai comandi CLI di OCI: create-apply-job.

  2. Ottiene lo stato del job.

    È necessario verificare se il job è riuscito o meno. Per fare ciò, passeremo il job_id in job get, che restituisce le proprietà del job. In particolare, ci interessa il lifecycle-state.

    job_state=$(oci resource-manager job get --job-id $job_id --raw-output --query 'data."lifecycle-state"')
    

    Per ulteriori informazioni, vedere OCI CLI Command Reference: job get.

  3. Analizzare lo stato del job.

    Aggiungere la logica per modificare il codice di uscita a seconda che il job sia riuscito (0) o non sia riuscito (1).

    if [ $job_state == SUCCEEDED ]; then
      echo "Resource Manager job succeeded"
      exit 0
    else
      echo "Resource Manager job failed"
      exit 1
    fi
    
  4. Dopo aver aggregato i passi precedenti e aggiunto alcune istruzioni di stampa aggiuntive, lo script shell dovrebbe avere un aspetto simile al seguente:

    version: 0.1
    component: command
    timeoutInSeconds: 1200
    steps:
    - type: Command
      timeoutinSeconds: 900
      name: Invoke RMS
      command: |
        echo "Running RM apply command"
        job_id=$(oci resource-manager job create-apply-job --stack-id ocid1.ormstack.oc1.iad.amaaaaaann2vciya6arauok6db5epqnhlfdmbf5ee7td6gydzwvarzanaxyq --execution-plan-strategy AUTO_APPROVED --wait-for-state SUCCEEDED --wait-for-state FAILED --query data.id --raw-output)
        echo "RMS plan job id is:"
        echo $job_id
        job_state=$(oci resource-manager job get --job-id $job_id --raw-output --query 'data."lifecycle-state"')
        echo "Apply job lifecycle-state is:"
        echo $job_state
        if [ $job_state == SUCCEEDED ]; then
          echo "Resource Manager job succeeded"
          exit 0
        else
          echo "Resource Manager job failed"
          exit 1
        fi
    

Nota: questo è un semplice esempio che mostra le funzionalità di base. È possibile personalizzare lo script in base alle proprie esigenze.

Task 8: Test end-to-end

L'architettura e il flusso completi dovrebbero essere così:

Diagramma di flusso

Confermare il funzionamento dell'architettura.

  1. Inserire un nuovo codice.

    Codice push

  2. Conferma esecuzione dello script shell riuscita.

    Shell riuscita

  3. Conferma dell'applicazione di Terraform riuscita.

    Aggiornamento dell'argomento di notifica

Passi successivi

Questa esercitazione ha mostrato come automatizzare le distribuzioni degli stack di OCI Resource Manager con OCI DevOps. Questo è un semplice esempio che mostra il flusso di base. Sei incoraggiato a prendere i concetti appresi e a svilupparli, personalizzarli in base al tuo caso d'uso e incorporarli nelle pipeline CI/CD esistenti.

Conferme

Altre risorse di apprendimento

Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti gratuiti sulla formazione su Oracle Learning YouTube channel. Inoltre, visita education.oracle.com/learning-explorer per diventare un Oracle Learning Explorer.

Per la documentazione del prodotto, visita l'Oracle Help Center.