IBM Cloud Docs
Pipeline di distribuzione continua

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-tests o " 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.

Fasi e compiti della pipeline
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 NA No
setup Impostare il tuo ambiente di build e test. 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. Pipeline
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. Pipeline
change-request Generare la richiesta di modifica e creare il riepilogo delle prove. No Pipeline No
deployment Distribuire gli artefatti di build all'ambiente, come la staging o la produzione. No NA No
acceptance-test Eseguire test di accettazione e integrazione sulla distribuzione. No Utente
finish Raccogliere e caricare file di log, artefatti e prove all'armadietto delle prove. Pipeline
rollback Questo è un passo all'interno di prod-finish, che viene eseguito ogni volta che viene rilevato uno scenario di rollback 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)

Modifica della proprietà
Modifica della proprietà

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.

  1. La pipeline CD avvia e contrassegna il commit corrente con l'ID di esecuzione della pipeline.

  2. La pipeline legge il contenuto del ramo dell'ambiente corrispondente da quel tag.

  3. La pipeline calcola il delta di distribuzione tra il commit corrente e il commit associato al <target-environment>_latest tag.

  4. 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.
  5. La pipeline distribuisce le modifiche identificate nel delta.

  6. Dopo una distribuzione riuscita, la pipeline allega il <target-environment>_latest tag 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.

  1. La pipeline CD avvia e contrassegna il commit corrente con l'ID di esecuzione della pipeline.
  2. La pipeline legge il contenuto del ramo dell'ambiente corrispondente da quel tag.
  3. La pipeline calcola il delta di distribuzione, che in questo scenario è tipicamente vuoto.
  4. L'impostazione force-redeploy=true fa sì che la pipeline salti il controllo delta e proceda.
  5. La pipeline ridistribuisce l'intero stato dell'applicazione dal ramo.
  6. Dopo una ridistribuzione riuscita, la pipeline allega il <target-environment>_latest tag al commit appena distribuito.

Procedura

  1. Avvia una nuova esecuzione manuale della pipeline CD.

  2. Nella configurazione del pipeline, impostare la variabile force-redeploy di ambiente su true.

  3. 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-start
  • prod-setup
  • prod-rollback-change-request
  • prod-deployment
  • prod-acceptance-tests
  • prod-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.

  1. Vai alla tua pipeline CD.
  2. Aggiungi un trigger manuale o duplica il trigger CD manuale.
  3. Modifica il trigger e imposta il listener su cd-rollback-listener.
  4. Seleziona Salva.
  5. 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:

Tabella 1. Proprietà dell'ambiente di rollback
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-id deve 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-id deve 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>_latest tag.
  • Dopo una distribuzione riuscita, il <target-environment>_latest tag viene spostato al nuovo commit (ripristinato).

Crea una richiesta pull per la promozione Rollback

  1. Identificare la versione di commit-id distribuzione nell'inventario a cui si desidera eseguire il rollback.
  2. Ripristina lo stato del repository a quel commit.
  3. Crea una richiesta pull per promuovere lo stato ripristinato.

L'esempio seguente illustra questo scenario utilizzando git i comandi.

  1. 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
    

  2. 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
    ...
    

  3. 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)
    

  4. Conferma il nuovo stato.

    # /c/usr/devsecops/compliance-inventory (master|REVERTING)
    $ git commit -m "revert master to 83f7a87ee59185eaeac554bd3abeebfd2c1b4ad8"
    [master af82538] revert master to 83f7a87ee59185eaeac554bd3abeebfd2c1b4ad8
    

  5. 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

  1. Crea una richiesta pull per le modifiche alla promozione del rollback.

  2. Esamina e unisci la richiesta pull.

  3. 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 su true se è 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.