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à
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. | Sì |
test |
Esegue i test unità sulla configurazione, IaC. | Sì |
static-scan |
Esegue il codice di scansione statico su IaC. | Sì |
compliance-checks |
Esegue le scansioni di Code Risk Analyzer e altri controlli di conformità sui repository delle applicazioni. | Sì |
build-artifact |
Crea le risorse corrispondenti alla configurazione. | Sì |
sign-artifact |
Firma le risorse create. | Sì |
deploy |
Distribuisce la configurazione, utilizzando le risorse utente create, all'ambiente di sviluppo. | Sì |
acceptance-test |
Esegue i test di accettazione e integrazione sulla configurazione distribuita nell'ambiente di sviluppo. | Sì |
release |
Aggiunge le risorse utente create all'inventario. | Sì |
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.
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
.
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
.
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 |
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.
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.
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
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
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.