Applicare un flusso di lavoro automatizzato
In questa unità vengono descritti gli strumenti per flussi di lavoro automatizzati e la loro integrazione con Terraform e Azure.
Informazioni su GitHub Actions
Per il responsabile dell'infrastruttura è necessario che i flussi di lavoro di compilazione e distribuzione usino lo stesso controllo della versione del progetto.
Usando GitHub Actions è possibile eseguire un processo di integrazione continua e recapito continuo (CI/CD) collegato ai repository GitHub.
Con GitHub Actions è possibile compilare, testare e distribuire il codice direttamente da GitHub. È anche possibile assegnare le revisioni del codice, gestire i rami e valutare i problemi.
Componenti di GitHub Actions
Di seguito sono descritti i diversi componenti di GitHub Actions, illustrati nel diagramma seguente:
- Flusso di lavoro: attivato da determinati eventi o attività, un flusso di lavoro è una raccolta di processi e passaggi che automatizzano le attività del ciclo di vita dello sviluppo del software.
- Processo: insieme di passaggi eseguiti in uno strumento di esecuzione.
- Passaggio: attività in grado di eseguire uno o più comandi o azioni. Ogni passaggio è costituito da singole azioni eseguite dopo un evento specifico, ad esempio una richiesta pull.
- Azioni: comandi autonomi che possono essere combinati in passaggi. È possibile combinare più passaggi per creare un processo. Le singole azioni sono script inseriti in un pacchetto che automatizzano le attività di sviluppo di software. Per creare un flusso di lavoro, si aggiungono le azioni in un file YAML nella directory .github/workflows del repository GitHub.
Azione GitHub di Terraform
L'azione hashicorp/setup-terraform configura l'interfaccia della riga di comando di Terraform nel flusso di lavoro di GitHub Actions:
- Scaricando una versione specifica dell'interfaccia della riga di comando di Terraform e aggiungendola a
PATH. - Configurando il file di configurazione dell'interfaccia della riga di comando di Terraform con un nome host di Terraform Cloud o Enterprise e un token API.
- Installando uno script wrapper per eseguire il wrapping delle chiamate successive del binario
terraformed esporre le relative STDOUT, STDERR e il codice di uscita come output denominati rispettivamentestdout,stderreexitcode.
Autenticare GitHub Actions con Azure
Terraform supporta diverse opzioni per l'autenticazione con Azure:
- Quando si usa Terraform in modo interattivo, è consigliabile eseguire l'autenticazione tramite un account Microsoft.
- Quando si usa Terraform dal codice o tramite l'automazione, è consigliabile eseguire l'autenticazione tramite un'entità servizio di Azure.
Un'entità servizio è un'identità creata per l'uso con applicazioni, servizi ospitati e strumenti automatizzati per accedere alle risorse di Azure.
Passaggi successivi
Nell'unità successiva verrà configurato un progetto di esempio e verrà usato GitHub Actions con Terraform per distribuirlo in Azure.
Concetti chiave per il nuovo Azure Pipelines
Di seguito sono descritti i componenti che costituiscono una pipeline di Azure.
- Un trigger attiva l'esecuzione di una pipeline.
- Una pipeline è costituita da una o più fasi. Una pipeline può essere distribuita in uno o più ambienti.
- Una fase è un modo per organizzare il processo in una pipeline e ogni fase può avere uno o più processi.
- Ogni processo viene eseguito in un unico agente. Un processo può essere anche senza agente.
- Ogni agente esegue un processo che contiene uno o più passaggi.
- Un passaggio può essere un'attività o uno script ed è il blocco predefinito minimo di una pipeline.
- Un'attività è uno script preconfezionato che esegue un'azione, ad esempio la chiamata di un'API REST o la pubblicazione di un artefatto della compilazione.
- Un artefatto è una raccolta di file o pacchetti pubblicati da un'esecuzione.
Suggerimento
Per informazioni più dettagliate sui diversi componenti della pipeline e su come usarli, vedere i collegamenti disponibili nella sezione Riepilogo.
Attività di Terraform per Azure Pipelines
Quando si eseguono comandi che interagiscono con Azure, ad esempio plan, apply e destroy, l'attività userà una Connessione al servizio di Azure per autorizzare le operazioni nella sottoscrizione di destinazione.
La soluzione consigliata per connettersi ad Azure consiste nell'associare la connessione al servizio a un'entità servizio di Azure. Un'entità servizio di Azure è un'identità creata per l'uso di strumenti automatizzati per accedere alle risorse di Azure.
Il frammento di codice YAML seguente usa il provider azurermdi Terraform per la pipeline di Azure. Per specificare una connessione al servizio, si deve immettere environmentServiceNameAzureRM:
- task: TerraformTaskV1@0
inputs:
provider: 'azurerm'
command: 'apply'
workingDirectory: $(Build.Repository.LocalPath)/terraform
backendAzureRmContainerName: 'tfstate'
backendAzureRmKey: 'tf/terraform.tfstate'
environmentServiceNameAzureRM: $(serviceConnection)
Suggerimento
Se si usa azurerm come provider di Terraform per la pipeline di Azure, è necessario anche specificare una connessione al servizio e un contenitore di archiviazione da usare con lo stato del back-end di Terraform.
Passaggio di parametri
Sono disponibili più metodi per passare i parametri ai comandi di Terraform. Le variabili offrono un modo pratico per ottenere i bit di dati chiave in varie parti della pipeline.
È possibile impostare una variabile per una pipeline di compilazione seguendo questa procedura:
- Passare alla pagina Pipeline, selezionare la pipeline appropriata e quindi Modifica.
- Individuare le Variabili per la pipeline.
- Aggiungere o aggiornare la variabile.
- Per contrassegnare la variabile come segreto, selezionare Mantieni segreto questo valore.
- Salvare la pipeline.
Output di Terraform nelle variabili della pipeline
L'attività TerraformCLI supporta l'esecuzione del comando output di Terraform. Quando viene eseguita l'interfaccia della riga di comando, vengono create variabili della pipeline da ogni variabile di output generata dal comando terraform output.
Passaggi successivi
Nell'unità successiva verrà configurato un progetto di esempio e verrà usato Azure Pipelines con Terraform per distribuirlo in Azure.