Pipeline di distribuzione continua
La pipeline di distribuzione continua genera tutti i contenuti di riepilogo delle prove e della richiesta di modifica. La pipeline distribuisce artefatti di build ad un ambiente, come la staging o la produzione, e poi raccoglie, crea e carica tutti i file di log esistenti, le prove e gli artefatti all'armadietto delle prove.
Stage e compiti
La tabella seguente elenca i compiti eseguiti in una pipeline CD. Inoltre la tabella fornisce anche una panoramica di ciascuna di queste fasi:
-
Attività o fase: fa riferimento al nome dello stage come definito nel file di configurazione
.pipeline-config.yaml. -
Breve descrizione: fornisce una breve spiegazione delle azioni eseguite durante l'esecuzione della fase.
-
Personalizzazione consentita: indica se gli utenti hanno la flessibilità di modificare o sostituire il comportamento predefinito dello stage inserendo uno script personalizzato nel file
.pipeline-config.yaml. -
Implementazione di riferimento predefinita: Indica se le pipeline DevSecOps sono dotate di un'implementazione predefinita o predefinita per la fase. In particolare, per alcune fasi come "
unit-testso "setup, la pipeline DevSecOps non offre alcuna implementazione immediata. Invece, agli utenti viene richiesto di fornire script o codice personalizzati in base ai requisiti dell'applicazione. -
Raccolta di prove: indica se la fase esegue la raccolta di prove standard. Quando DevSecOps Pipeline fornisce un'implementazione di riferimento per una fase, la raccolta delle prove viene eseguita out-of-the-box. Tuttavia, se l'utente sceglie di modificare o sostituire questi stage predefiniti, deve assicurarsi che le proprie implementazioni personalizzate includano una raccolta di prove appropriata. La stessa responsabilità ricade sugli utenti per le fasi in cui la pipeline DevSecOps non fornisce un'implementazione out-of-the-box, rendendo necessaria la raccolta di prove. La colonna indica l'entità (Utente / Pipeline) responsabile dell'esecuzione della raccolta di prove.
-
Ignora consentito (applicabile alla versione> = v10): indica se gli utenti possono scegliere di non eseguire questa fase impostando la proprietà ignora su true in
.pipeline-config.yaml. Tuttavia, si consiglia cautela quando si utilizza questa funzione, specialmente per le fasi progettate per raccogliere le prove. Saltare tali fasi potrebbe portare alla mancanza di evidenze essenziali per la build.
| Attività o stage | Descrizione breve | Personalizzazione consentita in .pipeline-config.yaml |
Implementazione di riferimento predefinita | Raccolta di prove | Ignora consentito |
|---|---|---|---|---|---|
start |
Impostare l'ambiente della pipeline. | No | Sì | NA | No |
setup |
Impostare il tuo ambiente di build e test. | Sì | No | NA | No |
verify-peer-review |
Assicurarsi che le richieste di pull destinate alla distribuzione corrente siano state approvate. Questa fase genera un elenco di richieste di pull collegate alla distribuzione in corso. Se le richieste di pull non vengono approvate, la distribuzione verrà arrestata. | Sì | Sì | Pipeline | Sì |
verify-artifact |
Convalidare la firma corretta dell'immagine pianificata per la distribuzione. Se all'immagine manca la firma appropriata, la distribuzione verrà ostacolata e verrà avviato il corrispondente processo di raccolta delle prove. | Sì | Sì | Pipeline | Sì |
change-request |
Generare la richiesta di modifica e creare il riepilogo delle prove. | No | Sì | Pipeline | No |
deployment |
Distribuire gli artefatti di build all'ambiente, come la staging o la produzione. | Sì | No | NA | No |
acceptance-test |
Eseguire test di accettazione e integrazione sulla distribuzione. | Sì | No | Utente | Sì |
finish |
Raccogliere e caricare file di log, artefatti e prove all'armadietto delle prove. | Sì | Sì | Pipeline | Sì |
rollback |
Questo è un passo all'interno di prod-finish, che viene eseguito ogni volta che viene rilevato uno scenario di rollback |
Sì | Sì | NA | No |
Per ulteriori informazioni su come personalizzare gli stage utilizzando il file .pipeline-config.yaml, consultare Script personalizzati e Parametri Pipeline.
Delta di distribuzione
Quando la promozione dell'inventario è pronta, è possibile avviare la pipeline di distribuzione continua. Il delta di distribuzione è la differenza tra il contenuto dell'ultima distribuzione conclusa e la distribuzione corrente. Il delta di distribuzione elenca gli articoli di inventario che vengono distribuiti.
Per accedere al delta di distribuzione negli script di distribuzione è possibile utilizzare i seguenti comandi:
# return a JSON file path with an array of inventory entries that were changed
get_env DEPLOYMENT_DELTA_PATH
# return a JSON file path with an array of inventory entries that were deleted
get_env DEPLOYMENT_DELTA_DELETIONS_PATH
# returns a JSON file path with an array of all inventory entries
get_env INVENTORY_ENTRIES_PATH
Calcola il BOM di distribuzione
La distribuzione Bill of Material (BOM) rappresenta tutti gli artefatti che vengono distribuiti come parte di una singola richiesta di modifica. Dopo che il delta di distribuzione viene calcolato, la pipeline crea il BOM di distribuzione in base a questi elementi.
Raccogli riepilogo delle prove
Un riepilogo delle prove viene creato da tutte le prove create durante la relativa build che ha portato ad una distribuzione. La prova che viene creata durante la distribuzione stessa viene aggiunta anche al riepilogo. Il riepilogo delle prove viene aggiunto alla descrizione della richiesta di modifica. Per impostazione predefinita, il riepilogo delle prove comprende le prove in fase di creazione raccolte nella pipeline CI insieme alle prove raccolte durante l'attuale esecuzione della pipeline CD.
Le seguenti istruzioni si applicano esclusivamente agli ambienti di produzione di CD Pipelines. Utilizzare l'indicatore di destinazione - ambiente - scopo per stabilire se l'ambiente è designato come pre_prod o production.
Prerequisito: nella pipeline CD che indica l'ambiente pre_prod, impostare l'indicatore pre - prod - evidence - collection su 1. Ciò abilita la raccolta e l'archiviazione delle prove di tempo di build nel contenitore delle prove per tutti gli asset distribuiti dalla pipeline CD, eseguendo la distribuzione nell'ambiente di pre - produzione. Per impostazione predefinita, per gli ambienti designati come pre_prod, l'indicatore pre - prod - evidence - collection è impostato su 1.
Nella pipeline del CD che indica l'ambiente di produzione, impostare l'indicatore pre -prod-evidence-collection su 1. Ciò consente al CD Pipeline che si rivolge all'ambiente di produzione di recuperare le prove raccolte
durante la distribuzione nell'ambiente di pre - produzione. Per impostazione predefinita, per ambienti designati come di produzione, l'indicatore pre-prod-evidence-collection è impostato su 0.
Una volta impostato l'indicatore pre-prod-evidence-collection su 1, le richieste di modifica generate dalla pipeline CD destinata all'ambiente di produzione includeranno riferimenti agli ID richiesta di modifica dagli
ambienti di pre - produzione all'interno del campo Record di convalida.
Per ulteriori informazioni, vedi Riepilogo della prova.
Preparare e creare richiesta di modifica
Tutto ciò che cambia la baseline deve essere tracciato tramite una richiesta di modifica. Queste modifiche includono gli aggiornamenti al livello di codice esistente, le modifiche alla configurazione e gli aggiornamenti dei nodi di lavoro. La raccolta dei dati di peer review compliance si basa sui dati accessibili nell'inventario, l'armadietto delle prove e il ripo dell'incidente.
Utilizzare get_env CHANGE_REQUEST_ID per sfruttare il valore dell'ID richiesta di modifica nelle fasi successive.
Non modificate il valore della variabile che utilizza set_env, poiché questo è destinato solo all'implementazione interna.
Questo passo crea la richiesta di modifica allegando i dati di conformità disponibili in base ai campi Richiesta pull pull. La disponibilità di distribuzione viene calcolata in base alle evidenze disponibili nello stato di conformità raccolto.
Se le evidenze di pre-produzione vengono acquisite nell'implementazione di produzione, le richieste di modifica di pre-produzione sono collegate alla richiesta di modifica di produzione. Per ulteriori informazioni, consultare Dati inclusi nelle richieste di modifica.
È possibile pre-creare più richieste di modifica utilizzando un listener dedicato alle richieste di modifica per diverse configurazioni di distribuzione, comprese distribuzioni in più regioni, destinazioni e cluster. Queste richieste di modifica predefinite, una volta approvate, possono essere trasmesse alla pipeline di distribuzione just-in-time, che sfrutta le informazioni precalcolate per accelerare l'effettiva distribuzione.
Verifica approvazione richiesta di modifica
Se ogni controllo di conformità ha esito positivo, come i test di unità, le attività di Code Risk Analyzer, la protezione dei rami e il rilevamento dei segreti, la richiesta di modifica viene approvata automaticamente e l'attività viene eseguita correttamente. Per ulteriori informazioni, vedi Automazione della gestione delle modifiche.
Se un controllo di conformità fallisce, lo stato di richiesta di modifica non viene approvato. È possibile approvare manualmente la richiesta di modifica e aggiungere il change-request-id alle proprietà dell'ambiente per utilizzare la richiesta di modifica precedentemente creata nella successiva esecuzione. È anche possibile approvare la richiesta di modifica manualmente e aggiungere un'etichetta di emergenza.
Distribuzione
Nella fase di deployment, la pipeline distribuisce gli artefatti costruiti in un ambiente, come staging o prod. Le variabili e le credenziali per queste fasi si possono trovare nelle seguenti fonti:
- Variabili dalla UI pipeline (
get_env)
Per ulteriori informazioni su come accedere a queste variabili, consultare Custom scripts.
Test di accettazione
È possibile eseguire una serie di test automatizzati per convalidare che la distribuzione ha avuto successo e sta funzionando come previsto. Ai fini della tracciabilità, assicurarsi che il log di prova contenga un riferimento al livello di codice o all'immagine che viene testato.
Modifica richiesta chiusura
I dettagli per la distribuzione vengono caricati sull'attività di modifica di riepilogo della chiusura e poi l'attività chiude la richiesta di modifica. L' close_category viene aggiunto all'attività di richiesta di modifica chiusura,
con i seguenti valori:
- Riuscito (se è stato distribuito pronto e la distribuzione del CD è riuscita)
- Riuscito con problemi (se il riepilogo ha dei problemi, non è stato pronto per la distribuzione e la distribuzione del CD è avvenuta con l'emergenza)
Conclusione dell'inventario
Per ulteriori informazioni sull'inventario concludiamo, consultare Inventory.
Ridistribuire un'applicazione
Panoramica
Se un'applicazione si blocca o si comporta in modo imprevisto dopo modifiche all'infrastruttura, è possibile forzare una nuova distribuzione per risolvere il problema.
Utilizzare force-redeploy=true quando si avvia un'esecuzione manuale della pipeline CD per sovrascrivere il comportamento predefinito di rilevamento delle modifiche. Questa impostazione indica alla pipeline di
reimplementare l'intero inventario, anche quando non vengono rilevate nuove modifiche.
Comportamento predefinito (senza reinstallazione forzata)
Quando non force-redeploy è impostato o è impostato su false, la pipeline viene distribuita solo quando vengono rilevate nuove modifiche nel repository dell'inventario per l'ambiente di destinazione.
-
La pipeline CD avvia e contrassegna il commit corrente con l'ID di esecuzione della pipeline.
-
La pipeline legge il contenuto del ramo dell'ambiente corrispondente da quel tag.
-
La pipeline calcola il delta di distribuzione tra il commit corrente e il commit associato al
<target-environment>_latesttag. -
La pipeline valuta il delta:
- Se il delta è vuoto, la pipeline si interrompe e non viene eseguita alcuna distribuzione.
- Se il delta contiene modifiche, la pipeline continua.
-
La pipeline distribuisce le modifiche identificate nel delta.
-
Dopo una distribuzione riuscita, la pipeline allega il
<target-environment>_latesttag al nuovo commit.
Comportamento forzato (con ridistribuzione della forza)
Quando force-redeploy è impostato su true, la pipeline ignora la convalida delta e ridistribuisce l'inventario completo, indipendentemente dalle modifiche rilevate. Questo approccio garantisce che lo stato completo
dell'applicazione venga riapplicato alla destinazione di distribuzione.
- La pipeline CD avvia e contrassegna il commit corrente con l'ID di esecuzione della pipeline.
- La pipeline legge il contenuto del ramo dell'ambiente corrispondente da quel tag.
- La pipeline calcola il delta di distribuzione, che in questo scenario è tipicamente vuoto.
- L'impostazione
force-redeploy=truefa sì che la pipeline salti il controllo delta e proceda. - La pipeline ridistribuisce l'intero stato dell'applicazione dal ramo.
- Dopo una ridistribuzione riuscita, la pipeline allega il
<target-environment>_latesttag al commit appena distribuito.
Procedura
-
Avvia una nuova esecuzione manuale della pipeline CD.
-
Nella configurazione del pipeline, impostare la variabile
force-redeploydi ambiente sutrue. -
Esegui la pipeline.
Annullare una distribuzione
Panoramica
Un rollback annulla una distribuzione precedente e ripristina uno stato noto dell'applicazione quando una distribuzione causa instabilità, errori o problemi di conformità. I rollback vengono generalmente eseguiti per ripristinare l'affidabilità del servizio, garantire la coerenza della configurazione o mantenere l'allineamento normativo.
Sono disponibili tre approcci di rollback, ciascuno adatto a diversi scenari di ripristino:
- Rollback completo: ripristina l'ultima configurazione valida nota facendo riferimento a un ID richiesta ServiceNow di modifica. Consigliato per un recupero controllato e verificabile.
- Rollback completo utilizzando GitOps: ripristina uno stato precedente ripristinando manualmente i commit nel repository dell'inventario. Non consigliato a causa della gestione limitata della conformità.
- Rollback in linea: ripristina una distribuzione non riuscita all'interno della stessa esecuzione della pipeline quando si verificano errori di esecuzione.
Ripristino completo
Panoramica della pipeline di rollback
Questa pipeline consente di ripristinare una configurazione precedente nota come corretta, selezionando uno specifico ID richiesta ServiceNow di modifica (ad esempio, CHG-12345).
Questo ID richiesta di modifica funge da segnalibro univoco per una distribuzione riuscita ed è un input obbligatorio per la pipeline di rollback.
È possibile trovare l'ID della richiesta di modifica per una distribuzione precedente in due modi:
- ServiceNow: individuare la richiesta di modifica relativa alla distribuzione che si desidera ripristinare.
- Repository dell'inventario: poiché lo stato dell'inventario è gestito nel controllo del codice sorgente, ogni distribuzione è identificata in modo univoco da un commit. È possibile trovare il commit a cui si desidera tornare
e identificare il
CHG-***tag associato a quel commit.
La pipeline di rollback comprende le seguenti fasi:
prod-rollback-startprod-setupprod-rollback-change-requestprod-deploymentprod-acceptance-testsprod-rollback-finish
Il processo della pipeline utilizza le informazioni della proprietà rollback-change-request-id environment per creare una nuova richiesta di modifica.
Per mantenere la conformità, la pipeline riapre le questioni legate alla precedente implementazione. Queste richieste sono allegate alla nuova richiesta di modifica e le loro date di scadenza originali rimangono invariate. Un rollback riuscito
sposta il _latest tag nell'inventario al commit precedente.
Creare una pipeline di rollback
Utilizza il comando cd-rollback-listener per eseguire un rollback all'ultima versione funzionante conosciuta.
- Vai alla tua pipeline CD.
- Aggiungi un trigger manuale o duplica il trigger CD manuale.
- Modifica il trigger e imposta il listener su
cd-rollback-listener. - Seleziona Salva.
- Creare un trigger separato per ogni combinazione richiesta di regione e ambiente di destinazione.
Attivare una pipeline di rollback
L'esecuzione di una pipeline di rollback utilizza le seguenti proprietà dell'ambiente:
| Proprietà ambiente | Descrizione |
|---|---|
rollback-change-request-id |
(Obbligatorio) L'ID della richiesta di modifica dell'implementazione completata che si desidera ripristinare. |
rollback-limit |
Il numero massimo di distribuzioni che è possibile ripristinare. Il valore predefinito è 1 (l'ultima distribuzione completata). |
region |
La regione per il rollback. |
target-environment |
L'ambiente di destinazione per il rollback (ad esempio, stage o prod). |
La pipeline termina a meno che non siano soddisfatti i seguenti criteri:
rollback-change-request-iddeve essere l'ID di una distribuzione completata per la stessa regione e lo stesso ambiente di destinazione.- Il deployment associato a non
rollback-change-request-iddeve essere più vecchio del numero di deployment specificato da rollback-limit.
La proprietà PIPELINE_NAME dell'ambiente Tekton determina se un'esecuzione è una distribuzione o un rollback.
cd-rollback-pipeline: Valore predefinito per un rollback.cd-pipeline: Valore predefinito per una distribuzione.
È possibile utilizzare questa proprietà per personalizzare la logica di ramificazione.
Rollback completo utilizzando GitOps
Panoramica del rollback utilizzando GitOps
Utilizza la pipeline di distribuzione continua per distribuire una versione precedente dell'inventario nell'ambiente di destinazione utilizzando Git operazioni che ripristinano le modifiche a uno specifico commit-id.
Poiché stai ripristinando i commit direttamente nel repository dell'inventario invece di attivare la pipeline di rollback con un ID richiesta ServiceNow di modifica, questo processo non riapre automaticamente i precedenti problemi di conformità né gestisce le loro date di scadenza.
Quando viene attivata, la pipeline CD completa i seguenti passaggi per la ridistribuzione:
- La pipeline avvia e contrassegna il commit corrente (il commit di ripristino) con l'ID di esecuzione della pipeline.
- La pipeline legge il contenuto del ramo dell'ambiente corrispondente da quel tag.
- La pipeline calcola il delta di distribuzione tra il commit corrente e il commit associato al
<target-environment>_latesttag. - Dopo una distribuzione riuscita, il
<target-environment>_latesttag viene spostato al nuovo commit (ripristinato).
Crea una richiesta pull per la promozione Rollback
- Identificare la versione di
commit-iddistribuzione nell'inventario a cui si desidera eseguire il rollback. - Ripristina lo stato del repository a quel commit.
- Crea una richiesta pull per promuovere lo stato ripristinato.
L'esempio seguente illustra questo scenario utilizzando git i comandi.
-
Elenca i commit e i tag per trovare l'ID del commit dell'ultimo stato corretto noto (ad esempio,
refs/tags/8)# /c/usr/devsecops/compliance-inventory (master) $ git show-ref --tags ... 83f7a87ee59185eaeac554bd3abeebfd2c1b4ad8 refs/tags/8 ... 1914a125e76aa97c497f4bd2c2f455b58cf079b8 refs/tags/prod_latest -
Elenca tutti i commit tra lo stato attuale (
refs/tags/prod_latest) e lo stato target (refs/tags/8).# /c/usr/devsecops/compliance-inventory (master) $ git rev-list --no-merges HEAD...83f7a87ee59185eaeac554bd3abeebfd2c1b4ad8 67cc8babdff3e09c1f0e632f897798c1b5424f38 6fab5ce3d60590cd858206424ecfd7d3a8c9ceb4 ... -
Ripristina lo stato dell'inventario al commit di destinazione (
refs/tags/8).# /c/usr/devsecops/compliance-inventory (master) $ git revert -n $(git rev-list --no-merges HEAD...83f7a87ee59185eaeac554bd3abeebfd2c1b4ad8) -
Conferma il nuovo stato.
# /c/usr/devsecops/compliance-inventory (master|REVERTING) $ git commit -m "revert master to 83f7a87ee59185eaeac554bd3abeebfd2c1b4ad8" [master af82538] revert master to 83f7a87ee59185eaeac554bd3abeebfd2c1b4ad8 -
Invia l'aggiornamento al ramo master.
# /c/usr/devsecops/compliance-inventory (master) $ git push --set-upstream origin master ... To [https://us-south.git.cloud.ibm.com/jaunin.b/compliance-inventory.git](https://us-south.git.cloud.ibm.com/jaunin.b/compliance-inventory.git) 67cc8ba..af82538 master -> master ...
Attiva la pipeline di distribuzione continua
-
Crea una richiesta pull per le modifiche alla promozione del rollback.
-
Esamina e unisci la richiesta pull.
-
Avvia l'esecuzione manuale della pipeline CD nella tua catena di strumenti CD.
Rollback in linea
Panoramica del rollback in linea
Questa modalità ripristina la distribuzione corrente nel contesto della stessa esecuzione della pipeline. È necessario quando si verifica un errore o un guasto durante la fase di implementazione o di test di accettazione, causando il fallimento del tentativo di implementazione.
Il rollback in linea viene eseguito automaticamente se la rollback-enabled proprietà dell'ambiente è impostata su 1 e si verifica un errore nella fase di test di distribuzione o accettazione.
Se viene attivato un rollback, la pipeline CD esegue il segmento definito per rollback nel .pipeline-config.yaml file. Se un rollback segmento non è definito nel file, viene eseguita un'implementazione
predefinita e viene richiesto di fornire uno script di rollback.
Esempio di script di rollback in .pipeline-config.yaml:
rollback:
image: icr.io/continuous-delivery/pipeline/pipeline-base-image:2.74
script: |
#!/usr/bin/env bash
if [[ "$PIPELINE_DEBUG" == 1 ]]; then
trap env EXIT
env
set -x
fi
source $WORKSPACE/$PIPELINE_CONFIG_REPO_PATH/scripts/deploy_setup.sh
source $WORKSPACE/$PIPELINE_CONFIG_REPO_PATH/scripts/rollback.sh
Proprietà impostate durante il rollback in linea
rollback-status: Indica lo stato della fase di rollback. I valori possibili sono:[notRun, success, failure]rollback-exit-code: Il codice di uscita della fase di rollback. Questo valore è vuoto se il rollback non è stato eseguito.default-rollback-executed: Impostare sutruese è stata eseguita l'implementazione predefinita (che richiede uno script). Questo valore è vuoto per impostazione predefinita.pipeline-execution-status: Indica lo stato dell'esecuzione complessiva della pipeline. I valori possibili sono:[successful_deployment, failed_deployment_failed_rollback, failed_deployment_successful_rollback]
Consentire la tracciabilità dell'implementazione
Quando una PR o una richiesta di fusione viene unita, il sistema migliora la trasparenza e la tracciabilità fornendo una chiara visibilità su ciò che accade successivamente. Aggiorna automaticamente la PR con lo stato di distribuzione, consentendo
agli stakeholder di seguire facilmente l'avanzamento di una correzione o di una funzionalità senza dover accedere ai dettagli della pipeline. Questo approccio semplificato non solo migliora la trasparenza, ma facilita anche la tracciabilità,
riducendo lo sforzo necessario per raccogliere e verificare le informazioni. Dopo una distribuzione riuscita, un'etichetta nel formato deploy:{region}:{env} viene applicata alle richieste di pull incluse nella distribuzione.
È disponibile un flag di opt-in deployment-traceability per abilitare questa funzione nella pipeline CD. Gli utenti possono attivare la tracciabilità dell'implementazione impostando il flag su 1 quando necessario.
Per supportare ulteriormente questa funzionalità, se l'utente vuole fornire un token specifico per aggiungere etichette alle PR nel repository dell'applicazione, può usare le seguenti proprietà dell'ambiente per specificare il token Git. L'ordine di ricerca del token Git è il seguente:
- Una proprietà dell'ambiente esistente per un token specifico del repository:
git-token-$repo_name-$repo_org. - Una nuova proprietà dell'ambiente per un token specifico dell'organizzazione:
git-token-$repo_org.