IBM Cloud Docs
Pull della pipeline di richiesta

Pull della pipeline di richiesta

La pipeline della richiesta di pull esegue una serie di verifiche dello stato di conformità su una richiesta di pull per il repository dell'applicazione specificato.

I tentativi di unire una richiesta di pull nel ramo principale potrebbero essere bloccati a causa di verifiche dello stato di conformità non riuscite. L'apertura o l'aggiornamento di una richiesta di pull rispetto al ramo master attiva l'esecuzione della pipeline di richiesta di pull. È possibile eseguire la propria configurazione per le pipeline e i test in Script personalizzati.

Fasi e attività

La tabella riportata di seguito elenca le attività eseguite in una pipeline RdA. 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 lo stage. 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 in modo immediato. 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 pronta all'uso, 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.

Ordine del gasdotto
Attività o fase Breve descrizione Personalizzazione consentita in .pipeline-config.yaml Implementazione di riferimento predefinita Requisito di raccolta prove Ignora consentito
start Configura l'ambiente della pipeline. No NA No
setup Impostare l'ambiente di build e di test. No NA No
detect-secrets Eseguire la scansione dei segreti di rilevamento sul codice dell'applicazione. NA No
unit-tests Esegui test di unità e test di app sul codice app. No NA
compliance-checks Esegui le scansioni di Code Risk Analyzer e altri controlli di conformità sui repository dell'app. NA
finish Consolida lo stato della pipeline. NA

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

Rileva scansione segreti

Lo strumento IBM Rileva segreti identifica dove i segreti sono visibili nel codice dell'applicazione. Ulteriori informazioni sulla configurazione del tuo repository per la scansione sono disponibili qui.

Scansioni e verifiche di conformità

Scansione o controllo Descrizione
Scansione vulnerabilità di Code Risk Analyzer Trova le vulnerabilità per tutte le dipendenze del pacchetto app, le immagini di base del contenitore e i pacchetti del sistema operativo. Utilizza lo strumento Code Risk Analyzer.
Verifica CIS di Code Risk Analyzer Esegue i controlli di configurazione sui manifest di distribuzione Kubernetes. Utilizza lo strumento Code Risk Analyzer.
Verifica BOM (Bill of Material) di Code Risk Analyzer Il BOM per un repository specificato che cattura il pedigree di tutte le dipendenze. Questo BOM viene raccolto in diverse granularità. Ad esempio, il BOM cattura l'elenco delle immagini di base utilizzate nella build, l'elenco dei package dalle immagini di base e l'elenco dei package di app installati sull'immagine di base. Il BOM funge da ground truth per i risultati analitici e può essere potenzialmente utilizzato per applicare i gate della politica. Utilizza lo strumento Code Risk Analyzer.

| Verifica della conformità del repository | Controlla che le impostazioni di protezione delle filiali siano corrette. |

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

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

Lavori attività

Scansioni e controlli di conformità
Lavoro attività Descrizione
code-pr-start Clona i repository app e DevSecOps e imposta lo stato di attesa iniziale per i controlli di stato sui repository Git Repos and Issue Tracking.
code-setup Il segnaposto per uno script personalizzato di configurazione definito dall'utente in cui l'utente può completare la sua configurazione della pipeline.
code-detect-secrets Esegue la scansione di rilevamento dei segreti per identificare dove sono visibili i segreti nel codice dell'applicazione.
code-unit-tests Il segnaposto per uno script personalizzato di test definito dall'utente in cui l'utente può eseguire i propri test.
code-pr-finish Esegue tutti i controlli di conformità richiesti, commenta i risultati della richiesta di pull e imposta i risultati sui repository Git Repos and Issue Tracking.

Utilizzo delle modifiche PR/MR per il repo di configurazione della pipeline

Se la linea di comando della PR deve considerare le modifiche dei file/script di configurazione provenienti dalla PR/MR, il repo e il ramo di configurazione devono essere vuoti e possono essere impostati come segue:

  • Le variabili env one-pipeline-repo, one-pipeline-config-repo e pipeline-config-repo sono vuote o non specificate nelle variabili env
  • Le variabili env one-pipeline-config-branch e pipeline-config-branch sono vuote o non specificate nelle variabili env.

Unisci richieste di pull con problemi

Puoi utilizzare i diritti di amministratore per unire le richieste di pull con controlli dello stato non riusciti al repository. Tuttavia, queste richieste di pull registrano un failure come prova per l'attività non riuscita. Questo risultato è incluso nel riepilogo delle prove e nella descrizione della richiesta di modifica e influisce sul punteggio di conformità finale nel Security and Compliance Center.

Consentire la raccolta di prove nella pipeline delle PR

La pipeline PR supporta la raccolta delle prove e la gestione dei problemi. Per impostazione predefinita, la pipeline PR non raccoglie prove e non apre alcun problema, ma gli utenti possono optare per questa funzione. Per abilitare la raccolta delle prove e la gestione dei problemi, impostare la variabile d'ambiente collect-evidence-in-pr come uno dei seguenti enum:

  • none: (predefinito) Impostare collect-evidence-in-pr a none, per impedire la raccolta di prove nella pipeline PR.
  • all: Impostare collect-evidence-in-pr su all per raccogliere tutte le prove indipendentemente dallo stato della pipeline PR. Le questioni saranno aperte, aggiornate o chiuse secondo lo script collect-evidence.
  • success: Impostare collect-evidence-in-pr a success per raccogliere le prove solo se l'intera pipeline PR è stata eseguita con successo. Se la pipeline PR non funziona, le prove non saranno raccolte o pubblicate nell'archivio delle prove e la gestione dei problemi non avrà luogo.

Nota: poiché le pipeline PR vengono generalmente eseguite con una certa frequenza, la scelta della modalità corretta di collect-evidence-in-pr eviterà la raccolta di prove non necessarie. Si suggerisce di selezionare la modalità success durante la fase di sviluppo o nei casi in cui si prevedono guasti, per evitare la raccolta di prove in caso di guasto della conduttura.

Se la pipeline PR attiva una pipeline Async, la modalità collect-evidence-in-pr impostata su success non è supportata. Se la pipeline PR attiva una pipeline async, impostare collect-evidence-in-pr su all per raccogliere le evidenze.

Nota: se il repository dell'applicazione è un repository GitLab e la MR (richiesta di fusione) che si sta contribuendo proviene da un repository biforcuto, l'utente dovrà fornire un valore per la variabile env git-token che ha accesso sia al repository di partenza che a quello di arrivo, per impostare gli stati corretti sulla richiesta di fusione. Ciò significa che il token git deve appartenere a un utente che sia un contributore sia nel repository di base sia nel repository biforcuto e che abbia i permessi per impostare lo stato su un commit.

Affiorano i CVE nelle PR

Quando viene creato un PR e le vulnerabilità vengono trovate dalla pipeline PR, la pipeline aggiunge le informazioni sulla vulnerabilità come la gravità, l'identificatore cve, il pacchetto con la sua descrizione e la correzione, se disponibile, come commento. Ciò consente agli utenti di verificare rapidamente le vulnerabilità da correggere nella PR, invece di dover esaminare i registri della pipeline.

È disponibile un flag di opt-in opt-in-pr-updates per abilitare/disabilitare questa funzione nella pipeline delle PR. È abilitata per impostazione predefinita.

Impostazione di una pipeline PR per gestire le PR di Github Merge Queue

La Merge Queue è una funzione di Github che aiuta ad aumentare la velocità automatizzando le fusioni delle richieste di pull in un ramo occupato e garantendo che il ramo non venga mai interrotto da modifiche incompatibili. Per saperne di più sulla configurazione e sull'uso di Github Merge Queue , cliccate qui.

Creare un nuovo trigger Git

Creare un nuovo trigger Git o duplicarne uno esistente. Mantenere tutte le impostazioni predefinite, sovrascrivendo solo le seguenti proprietà:

  • Name: preferisce avere un nome di trigger che rifletta il contesto della coda di unione, ad esempio: PR - Merge Queue
  • EventListener: selezionare pr-listener-merge-queue
  • Trigger on: selezionare CEL filter
    • CEL filter: inserire body.action == 'checks_requested'

I PR in coda di fusione utilizzano rami effimeri - creati "al volo" quando il PR originale viene aggiunto alla coda di fusione - da cui viene creato il PR in coda di fusione. Di conseguenza, il corrispondente payload dell'evento Git (che attiva la pipeline delle richieste di pull) non contiene alcuna informazione su PR URL o HTML URL.

Irrilevante nel contesto della coda di unione, le seguenti funzioni di DevSecOps devono essere disabilitate aggiungendo le proprietà di testo corrispondenti:

  • skip-merge-pr-to-base: deve essere impostato su true (valore predefinito: false)
  • opt-in-pr-updates: deve essere impostato su 0 (valore predefinito 1)

Salvate l'innesco.

Verifica dell'attivazione della coda di unione

  • Creare una nuova richiesta di pull per il ramo principale del repository del codice sorgente dell'applicazione.
  • Osservare: viene attivata la pipeline PR "standard" di DevSecOps
  • enqueue Sempre nella pagina della PR, fare clic su Merge when ready e poi su Attempt merge when ready: in questo modo la PR verrà trasferita nella coda di unione una volta completata la PR "standard".
  • Attendere che la PR "standard" di DevSecOps sia completata con successo
  • Osservare: una volta completata la pipeline PR, la PR viene aggiunta alla Merge Queue e la Merge Queue PR viene attivata:
    • Attendere il completamento della PR della coda di unione
    • In caso di successo, il PR viene unito con un commento del tipo Merged via the queue into main with commit abcdefg
    • In caso di esito negativo (ad esempio, controllo di conformità fallito), la PR non verrà unita automaticamente e verrà rimossa dalla coda di unione.

Panoramica del carico utile PR

Payload

Un payload è un termine generico usato per descrivere un blocco strutturato di dati, solitamente in formato JSON, che viene trasmesso come parte di un evento o di una richiesta. I payload sono comunemente utilizzati nei webhook, nelle API e nei sistemi di automazione per trasmettere informazioni rilevanti in forma leggibile dalla macchina.

I payload possono rappresentare un'ampia gamma di contenuti a seconda del contesto, ad esempio metadati di compilazione, attività degli utenti, aggiornamenti dei problemi o, in questo caso, dettagli delle richieste di pull.

Carico utile PR

cd-devsecops-pr-payload

Il payload PR è un'istanza specifica di un payload che incapsula metadati e informazioni contestuali su una richiesta di pull (PR). Viene generato quando si verifica un evento di richiesta di pull e fornisce un accesso strutturato agli attributi chiave relativi a quella PR.

Questo carico utile comprende un'ampia gamma di dati, quali:

  • Titolo e descrizione della PR
  • Autore e revisori
  • Rami di origine (testa) e di destinazione (base)
  • Cronologia degli impegni e riferimenti SHA
  • Dettagli del repository
  • Timestamp, etichette, stati e altro ancora

Sebbene il payload completo contenga numerose informazioni, solo un sottoinsieme specifico di campi viene attualmente estratto ed esposto come variabili d'ambiente da utilizzare in pipeline, script e file di configurazione.

Proprietà dell'ambiente estratte dal payload PR

Le seguenti variabili d'ambiente sono attualmente derivate dal payload PR e vengono utilizzate attivamente:

Nome variabile Descrizione
head-branch Il ramo di origine della PR (ramo da cui viene effettuata la fusione)
head-sha L'SHA di commit dell'ultimo commit sul ramo di testa
head-repo Il repository da cui proviene la PR
base-branch Il ramo di destinazione della PR (ramo in cui si sta effettuando la fusione)
base-repo Il riferimento completo al repository di base
base-repo-name Il nome del repository di base
base-repo-owner Il proprietario (utente o organizzazione) del repository di base
commit-timestamp Il timestamp del commit più recente nella PR
pr-url L'API URL della richiesta di pull
pr-html-url Il sito web (HTML) URL della richiesta di pull
pr-title Il titolo della richiesta di pull
action stato di PR
base_ref ramo di destinazione della PR

Questi valori vengono iniettati come variabili d'ambiente per semplificare l'accesso durante l'esecuzione nei flussi di lavoro automatizzati.

Il payload PR comprende molti campi aggiuntivi rispetto a quelli elencati sopra. Tuttavia, solo il sottoinsieme estratto viene attualmente utilizzato per scopi operativi. Se necessario, è possibile accedere al carico utile completo per casi d'uso avanzati o per espansioni future.