IBM Cloud Docs
Pipeline di integrazione continua per Infrastructure as Code

Pipeline di integrazione continua per Infrastructure as Code

La pipeline di integrazione continua per Infrastructure as Code (IaC) crea la configurazione distribuibile dai repository IaC (contenuto Terraform).

Prima di creare le risorse utente, la pipeline controlla che il codice venga scansionato e verificato, nello stesso modo in cui vengono elaborate le richieste di pull. Le risorse create vengono anche sottoposte a scansione per rilevare eventuali vulnerabilità e firmate nella pipeline prima di essere contrassegnate come pronte per il rilascio e la distribuzione nell'inventario. Per ulteriori informazioni, consultare Inventario. A differenza della pipeline di richiesta di pull, la pipeline di integrazione continua raccoglie le prove e le risorse utente dei risultati in ogni fase della build, come test, scansione e firma. Questi dati sono correlati alle risorse utente create e possono essere tracciati attraverso il processo di distribuzione e la gestione delle modifiche.

Fasi e attività

Tabella 1. Integrazione continua per IaC fasi e attività
Attività o fase Descrizione breve Personalizzabile in .pipeline-config.yaml
start Imposta l'ambiente della pipeline. No
setup Imposta l'ambiente di build e di test.
test Esegue i test unità sulla configurazione, IaC.
static-scan Esegue il codice di scansione statico su IaC.
compliance-checks Esegue le scansioni di Code Risk Analyzer e altri controlli di conformità sui repository delle applicazioni.
build-artifact Crea le risorse corrispondenti alla configurazione.
sign-artifact Firma le risorse create.
deploy Distribuisce la configurazione, utilizzando le risorse utente create, all'ambiente di sviluppo.
acceptance-test Esegue i test di accettazione e integrazione sulla configurazione distribuita nell'ambiente di sviluppo.
release Aggiunge le risorse utente create all'inventario.
finish Raccoglie, crea e carica i file di log, le risorse utente e le prove nel blocco delle prove. No

Per ulteriori informazioni su come personalizzare gli stage utilizzando il file .pipeline-config.yaml, consultare Script personalizzati. e) e gli elenchi Parametri pipeline.

Parametri per configurare variabili e contesto Terraform

Per le definizioni Terraform che definiscono l'origine Infrastructure - as - code, il contesto e le variabili correlate alla scansione e ai controlli correlati a Terraform possono essere definiti utilizzando i parametri descritti nella tabella 1.

Tabella 2. Parametri per configurare il contesto Terraform e le variabili
Proprietà Valore predefinito Descrizione
tf-dir . Ubicazione o percorso nel repository di origine in cui si trova main.tf.
TF_VAR_<XXXX> Proprietà pipeline o trigger (protetta o non protetta) che fornisce il valore per la variabile Terraform <XXXX>
tfvars-repository Repository Git del codice sorgente dell'infrastruttura. Repository Git che contiene file tfavars. Il repository deve essere dichiarato nella toolchain.
tfvars-branch main Ramo del repository Git che contiene i file tfvars.
tfvars-files File che contengono valori di variabili Terraform.
terraform-version 1.2.9 Versione dello strumento CLI Terraform da installare se non presente nell'immagine utilizzata per le fasi stages.You puoi anche fornire versioni come 1.5.0-1. Di seguito è riportato l'elenco [delle versioni di Terraform]. (https://releases.hashicorp.com/terraform/)

Gli stessi parametri si applicano per gli script utilizzati in un processo di distribuzione CD IaC. Poiché il processo CD può elaborare più voci di inventario, è possibile definire un parametro per una voce di inventario. Per specificare il contesto Terraform e le variabili per un ambito (voce di inventario), anteporre alla proprietà il nome della voce di inventario, ad esempio: <inventory_entry>_. Questo prefisso si riferisce alle voci di ambiente tf-dir, TF_VAR_<XXXX>, tfvars-repository, tfvars-branch e tfvars-files.

Esempio:

hello-iac-sample_TF_VAR_resource_group : Default

Scansione codice statico

Lo stage di scansione del codice statico esegue un numero di strumenti di analisi del codice statico sui repository IaC specificati. Viene eseguita la scansione dei repository forniti dal comando pipelinectl save_repo e dal repository dell'applicazione predefinito.

È possibile utilizzare qualsiasi metodo definito per la scansione del codice statico configurabile per la pipeline di integrazione continua correlata all'applicazione.

La pipeline di integrazione continua IaC definisce ulteriori strumenti abilitati utilizzando i parametri opt-in-* della tabella 2 impostati su 1.

Tabella 3. IaC parametri strumenti di scansione statica
Nome Tipo Predefinito Descrizione Obbligatorio o facoltativo
opt-in-terraform-fmt-validate text Esegue i comandi terraform fmt e terraform validate nella fase static-scan. facoltativo
opt-in-tflint text Esegue il comando tflint nella fase static-scan. facoltativo
tflint-version text v0.46.1 Indica la versione tflint da installare se non fornita nell'immagine utilizzata per l'esecuzione dello stage static-scan. facoltativo
tflint-config text Il file di configurazione da utilizzare per tflint. facoltativo
tflint-args text Gli argomenti del comando passati a tflint durante il richiamo dello strumento. facoltativo

Scansioni e verifiche di conformità

I controlli di conformità definiti per la pipeline di integrazione continua correlata all'applicazione vengono eseguiti anche per la pipeline di integrazione continua IaC.

La pipeline di CI IaC esegue alcuni controlli aggiuntivi abilitati utilizzando le funzioni opt-in-.

La pipeline CI IaC definisce più strumenti abilitati utilizzando i parametri opt-in- impostati su 1.

Tabella 4. IaC ulteriori verifiche e scansioni di conformità
Scansione o controllo Descrizione Abilitazione
cra-tf Utilizza il comando ibmcloud cra terraform-validate dallo strumento CRAIBM Cloud per analizzare un piano Terraform per la conformità opt-in-cra-tf-validate impostato su 1.
tfsec Utilizzare il tool TFsec per individuare potenziali configurazioni errate e creare problemi di conformità. opt-in-tfsec impostato su 1
checkov Utilizzare lo strumento Checkov per individuare configurazioni errate e creare problemi di conformità. opt-in-checkov impostato su 1
Tabella 5. IaC scansione di conformità e verifica i parametri di configurazione
Proprietà Valore predefinito Descrizione
opt-in-cra-tf-validate L'indicatore per eseguire le verifiche di conformità utilizzando lo strumento ibmcloud cra terraform-validate.
cra-tf-policy-file Il percorso del file del profilo della normativa. Per ulteriori informazioni, vedi Opzioni del comando Terraform.
cra-tf-scc-instance-name Impostazione predefinita sull'integrazione dello strumento Security and Compliance Center configurato nella toolchain Il nome di integrazione dello strumento Security and Compliance Center da utilizzare per richiamare il profilo e l'allegato per configurare il comando cra terraform validate.
cra-tf-ignore-rules L'elenco separato da virgole di regole da ignorare dal report ibmcloud cra terraform-validate.
cra-tf-ignore-rules-file Il percorso del file JSON che contiene l'elenco di regole da ignorare dal report ibmcloud cra terraform-validate. Per ulteriori informazioni sul formato del file, consultare Formato per cra - tf - ignore - rules - file.
opt-in-tfsec L'indicatore per eseguire le verifiche di conformità utilizzando lo strumento tfsec.
tfsec-version `v1.21.0`` The tfsec versione da utilizzare.
tfsec-args Gli argomenti del comando tfsec.
opt-in-checkov L'indicatore per eseguire le verifiche di conformità utilizzando lo strumento checkov.
checkov-image bridgecrew/checkov L'immagine che esegue il controllo di compatibilità checkov.
checkov-args Gli argomenti del comando checkov.

Questi script vengono eseguiti su tutti i repository di cui la pipeline è a conoscenza. Per aggiungere repository a queste scansioni, utilizza l'interfaccia pipelinectl fornita nella tua fase di configurazione. Per ulteriori informazioni, consultare pipelinectl.

Per ulteriori informazioni sull'output previsto dagli stage di script utente, consultare Script personalizzati.

Formato per cra-tf-ignore-rules-file

Il formato previsto per il file definito da cra-tf-ignore-rules-file format. Il formato è simile al formato (senza il campo scc_parameters ) presente nel file di profilo classico Esempio SCC V2 per il comando terraform-validate.

Contenuto di esempio per file cra-tf-ignore-rules-file :

{
    "scc_rules": [
        {
            "scc_rule_id": "rule-8cbd597c-7471-42bd-9c88-36b2696456e9"
        },
        {
            "scc_rule_id": "rule-c97259ee-336d-4c5f-b436-1868107a9558"
        }
    ]
}

Risorsa utente di build

Nella fase della risorsa utente di build, è possibile creare le proprie risorse utente. Per la pipeline CI IaC, la funzione build predefinita crea un file Tar contenente la configurazione Terraform.

La funzione di generazione predefinita può essere configurata utilizzando parametri specifici dalla Tabella 5.

Tabella 6. Parametri di configurazione della risorsa utente di build
Proprietà Valore predefinito Descrizione
configuration-name La parte "umana" del nome repository Git. Il nome delIaC configurazione. Utilizzato per il nome file della risorsa utente e la voce di inventario creati dalla pipeline CI IaC.
build-ignore-file Percorso di un file di elenco di elementi da ignorare (utilizzato per tar --exclude-from)

Per ulteriori informazioni su come accedere ai parametri e ai segreti nelle fasi di script personalizzati, consultare Script personalizzati.

Firma risorsa utente

Lo stage sign artifact fornisce un comportamento predefinito per utilizzare una chiave GPG per creare un file di firma scollegato per una o più risorse utente.

Tabella 7. Chiave GPG della risorsa utente di build
Proprietà Descrizione
signing-key Il valore della chiave privata GPG utilizzato per la versione ascii delle firme scollegate di una o più risorse utente

Per utilizzare un processo di firma differente, personalizza questa fase utilizzando la configurazione .pipeline-config.yaml del progetto.

Distribuisci allo sviluppo

Lo stage di distribuzione distribuisce la risorsa utente di configurazione in un ambiente di sviluppo. Puoi fornire le tue credenziali e variabili per questa fase dalle variabili nell'IU della pipeline e dal payload webhook del trigger della pipeline.

Gli script forniti come parte dell'immagine di base comune possono essere utili per eseguire una distribuzione utilizzando gli schemi o la CLI Terraform. I parametri per configurare gli script per l'azione di distribuzione sono descritti nella Tabella 8 e nella Tabella 9.

Parametri di configurazione per utilizzare Schematics come strumento di distribuzione

Tabella 8. Parametri di configurazione per utilizzare Schematics come strumento di distribuzione
Proprietà Valore predefinito Descrizione
schematics-ibmcloud-api-key Sovrascrive il ibmcloud-api-key utilizzato per le azioni correlate allo schema (richiamo / creazione dello spazio di lavoro schema, piano & applicazione).
schematics-workspace-name <schematics-workspace-prefix><toolchain name>-<pipeline id> Spazio di lavoro da utilizzare o da creare se non esiste. Se lo spazio di lavoro esiste, deve essere uno spazio di lavoro creato senza un link a un repository Git. Per ulteriori informazioni, consultare Schematics Workspace creation. Questa limitazione si verifica perché lo script carica la risorsa di configurazione IaC come un file tar utilizzando Schematics Workspace upload.
schematics-workspace-prefix Il prefisso utilizzato per la creazione dello spazio di lavoro quando non è specificato alcuno spazio di lavoro per l'azione di distribuzione.
schematics-workspace-resource-group Il valore predefinito è il gruppo di risorse della toolchain. Gruppo di risorse da utilizzare per la creazione dello spazio di lavoro degli schemi.
schematics-workspace-region L'impostazione predefinita è la regione della toolchain. Area da utilizzare per la creazione dello spazio di lavoro Schematics.
schematics-workspace-netrc Calcolato da repository noti. Valore per la configurazione netrc dello spazio di lavoro schematics da creare. Per ulteriori informazioni, consultare Supporto per scaricare i moduli dall'host remoto privato.
schematics-workspace-terraform-version Il valore predefinito è la versione di schematics terraform richiamata utilizzando ibmcloud schematics version --output JSON Versione Terraform utilizzata per lo spazio di lavoro schematics da creare. Vedi Panoramica delle immagini Schematics e dei provider Terraform in pacchetto.

Per configurare gli script nel processo di distribuzione CD IaC, definire il parametro nell'ambito di una determinata voce di inventario. Per specificare le proprietà di ambiente relative a Schematics as deployment tool per un determinato ambito (voce di inventario), anteporre alla proprietà il nome della voce di inventario, ad esempio: <inventory_entry>_. Questo prefisso si riferisce a tutte le voci di ambiente relative agli schemi (tranne schematics-ibmcloud-api-key).

Esempio:

hello-iac-sample_schematics-workspace-name : workspace-for-deployment-of-hello-iac-sample

Configurazione per utilizzare la CLI Terraform come strumento di distribuzione

Tabella 9. Configurazione per utilizzare la CLI Terraform come strumento di distribuzione
Proprietà Descrizione
tf-backend-s3-bucket Nome bucket che archivia lo stato.
tf-backend-s3-key Nome da utilizzare per rendere persistente lo stato.
tf-backend-s3-region Regione dell'istanza Cloud Object Storage.
tf-backend-s3-endpoint Cloud Object Storage punto finale.
tf-backend-s3-access_key HMAC access_key sottosezione delle credenziali.
tf-backend-s3-secret_key HMAC secret_key sottosezione delle credenziali.

Tieni presente quanto segue:

  • Per ulteriori informazioni su come utilizzare l'endpoint o il bucket Cloud Object Storage per archiviare lo stato Terraform, consulta: Archivia gli stati Terraform in Cloud Object Storage.
  • Per configurare gli script nel processo di distribuzione CD IaC, definire il parametro nell'ambito di una voce di inventario. Per specificare le proprietà di ambiente correlate Terraform CLI as deployment tool per un ambito (voce inventario), anteporre alla proprietà il nome della voce di inventario, ad esempio: <inventory_entry>_. Questo prefisso si applica a tutte le voci di ambiente relative agli schemi.

Esempio:

hello-iac-sample_tf-backend-s3-bucket : bucket-to-store-tfstate-of-hello-iac-sample

Rilascia nell'inventario

Utilizzare la fase di rilascio dello script utente di inventario per aggiungere risorse utente all'inventario utilizzando il comando CLI cocoa inventory add. Per ulteriori informazioni su cocoa inventory add, vedi cacao inventory add.

Puoi utilizzare l'interfaccia pipelinectl per accedere ai tuoi repository e risorse utente utilizzando i comandi list_repos, load_repo, list_artifacts e load_artifact. Per ulteriori informazioni, vedi pipelinectl.

Raccolta dei dati di conformità sulla build

Quando la pipeline viene eseguita correttamente, è possibile raccogliere le informazioni sulla build.

Le prove vengono raccolte su tutti i controlli, le scansioni, i test e le firme delle risorse utente e vengono inserite nell'armadietto delle prove. I file di log della pipeline vengono salvati anche nell'locker, insieme ai dati della pipeline stessi, contenenti le definizioni Tekton. I dati di conformità sulle revisioni peer vengono raccolti anche in questa fase. La pipeline utilizza pipelinectl per ricercare i repository con le richieste di pull unite dall'ultima build. La pipeline controlla anche lo stato della revisione RdA, la salva come risorsa utente e crea la prova in base al risultato.

Lo script finale è un programma di valutazione, che contrassegna lo stato della pipeline in verde o in rosso, in base agli stati della prova. In caso di errori, l'esecuzione dell'integrazione continua viene contrassegnata in rosso.