Riutilizzo delle prove nelle pipeline di PR e CI

Per impostazione predefinita, quando viene eseguita una pull request o una pipeline di CI, tutte le scansioni e i test configurati vengono sempre eseguiti, anche se il contenuto del repository o l’immagine che viene sottoposta a scansione o test non è cambiato dall’ultima scansione o dall’ultimo test. Di conseguenza, ad ogni esecuzione vengono raccolte nuove prove. Questo comporta uno spreco di tempo e risorse.

DevSecOps Le pipeline offrono una funzionalità opzionale denominata " Evidence Reuse " che consente di saltare la scansione o il test nelle fasi della pipeline quando il contenuto del repository o l'immagine oggetto di scansione o test non è cambiato dall'ultima scansione o dall'ultimo test. In questo caso, non vengono effettuate scansioni né prove, quindi non vengono raccolte nuove prove. Al contrario, i dati raccolti in precedenza per la scansione o il test vengono recuperati e riutilizzati nei riepiloghi CI, CD e CC. Ciò accelera i flussi di lavoro relativi alle pubbliche relazioni e alla comunicazione aziendale e ottimizza l'utilizzo delle risorse. Quando la funzione è abilitata, la pipeline verifica che l'oggetto sottoposto a test o scansione non abbia subito modifiche rispetto all'esecuzione precedente. Se la convalida ha esito positivo, le fasi della pipeline possono saltare il test o la scansione e basarsi sulle prove e sui risultati raccolti in precedenza.

I casi d'uso tipici del riutilizzo delle prove sono:

  • Caso d'uso 1:

    • Eseguire i test unitari nella pipeline delle pull request con la raccolta delle prove.
    • Esegui il merge della PR con il metodo che preferisci (rebase, squash o merge standard).
    • Se il codice sorgente non è cambiato tra l'esecuzione della pipeline PR e quella della CI, l'esecuzione dei test unitari nella pipeline CI può essere saltata. I risultati dei test unitari ottenuti dall'esecuzione della pipeline PR vengono recuperati e riutilizzati per il riepilogo CI.
  • Caso d'uso 2:

    • Esegui la pipeline PR con la raccolta delle prove oppure esegui la pipeline CI.
    • Una delle fasi del flusso di lavoro, ad esempio compliance-check, non va a buon fine a causa di un problema intermittente.
    • Esegui nuovamente la pipeline PR o CI sullo stesso commit.
    • Le scansioni e i test completati con esito positivo vengono saltati nella nuova esecuzione, mentre i relativi risultati dell'esecuzione precedente vengono recuperati e riutilizzati.
    • Viene eseguita solo la scansione non riuscita e vengono raccolte nuove prove relative a essa.

Per abilitare la raccolta delle prove nella pipeline PR, consultare la sezione " Raccolta delle prove nella pipeline PR ".

Consentire il riutilizzo delle prove

Per abilitare il riutilizzo delle prove nella pipeline PR o CI, imposta la proprietà dell'ambiente evidence-reuse su 1``. Per impostazione predefinita, questa proprietà non è abilitata.

Tabella 1. Proprietà relative al riutilizzo delle prove
Proprietà Descrizione Valore predefinito
evidence-reuse Impostare su " 1 " per consentire il riutilizzo delle prove. Non abilitato
evidence-reuse-for-failure Impostare su " 1 " per riutilizzare anche le prove non valide. Impostalo in aggiunta a evidence-reuse=1. Non abilitato
evidence-validity-period Numero di ore entro le quali è possibile riutilizzare le prove. 24 (massimo 720, ovvero 30 giorni)

Lo strumento “ check-evidence-for-reuse ” verifica se esistono prove relative alla combinazione di asset-key, tool-type e evidence-type e accertano che tali prove soddisfino le condizioni per il riutilizzo. Per ulteriori informazioni, consultare check-evidence-for-reuse.

Per il riferimento completo ai comandi CLI e a tutti i parametri disponibili, consultare " cocoa locker evidence reuse ".

Condizioni per il riutilizzo delle prove

Lo strumento " check-evidence-for-reuse " verifica le seguenti condizioni:

  • Le prove sono state raccolte sullo stesso asset di commit, contenuto del repository o asset immagine.
  • Lo stato delle prove è “ success ”. I dati con qualsiasi altro stato non vengono presi in considerazione per il riutilizzo e viene eseguita una nuova scansione. Ciò garantisce che, qualora siano state raccolte prove relative a un errore dovuto a un malfunzionamento intermittente in una fase, l'esecuzione successiva della pipeline non riutilizzi le prove relative a tale errore. Al contrario, viene eseguita una nuova scansione e vengono raccolte nuove prove. Tuttavia, in alcuni casi è necessario riutilizzare le prove non valide. Ad esempio, una scansione ha rilevato una vulnerabilità nella pipeline CI e la modifica deve essere implementata con una distribuzione d'emergenza. Per riutilizzare le prove non valide, imposta la proprietà di ambiente evidence-reuse-for-failure=1 oltre a evidence-reuse=1.
  • Le prove non sono obsolete. La data di raccolta delle prove rientra nel periodo di validità. Il periodo di validità predefinito è di 24 ore. È possibile configurare il valore per un'esecuzione della pipeline utilizzando la proprietà di ambiente evidence-validity-period (in ore). Il valore è soggetto a un limite massimo di 720 ore (30 giorni).
  • Facoltativamente, le prove corrispondono a eventuali controlli di configurazione salvati nella sezione dei dettagli, come la versione dello strumento o la versione dell'immagine di base del passaggio.

Strumenti e tipi di prove supportati

Gli script di scansione predefiniti utilizzati in DevSecOps sono stati aggiornati per consentire il riutilizzo delle prove quando questa funzione è abilitata.

Tipi di prove per i quali è supportato il riutilizzo delle prove:

Tabella 3. Tipi di prove e supporto al riutilizzo
Tipo di prova Può essere riutilizzato
com.ibm.static_scan Sì
com.ibm.dynamic_scan Sì
com.ibm.detect_secrets Sì
com.ibm.code_bom_check Sì
com.ibm.code_cis_check Sì
com.ibm.code_vulnerability_scan Sì
com.ibm.acceptance_tests Sì. È necessario aggiornare lo script personalizzato.
com.ibm.unit_tests Sì. È necessario aggiornare lo script personalizzato.
com.ibm.branch_protection No
com.ibm.pipeline_run_data No
com.ibm.peer_review No

Aggiorna i tuoi script personalizzati, come i test unitari e i test di accettazione, per consentire il riutilizzo delle prove quando questa funzionalità è abilitata. Per implementare il riutilizzo delle prove nei tuoi script personalizzati, consulta la sezione seguente.

L'adozione del riutilizzo delle prove negli script

Per implementare il riutilizzo delle prove nei tuoi script, verifica innanzitutto se sono disponibili prove riutilizzabili. Il seguente pseudocodice illustra come verificare la presenza di prove e decidere il passo successivo.

Pseudocodice

Check whether evidence for reuse exists for (asset, tool, evidence-type) by using check-evidence-for-reuse
  If evidence is found
    Skip the scan or test
    Save the reused result file (optional)
  Else
    Continue with your existing scan process and collect new evidence as usual

Verificare se sono disponibili prove che possano essere riutilizzate

Utilizza il comando check-evidence-for-reuse con gli stessi parametri utilizzati nello script collect-evidence . Per ulteriori dettagli, consultare check-evidence-for-reuse.

Il comando termina con il messaggio " 0 " quando viene individuata e salvata una prova riutilizzabile, e con il messaggio " 1 " quando non viene individuata.

Utilizzo di esempio

evidence_params=(
  --tool-type "my-tool"
  --evidence-type "com.ibm.unit_tests"
  --asset-type "repo"
  --asset-key "${repo_key}"
)
reused_evidence_json="$(mktemp)"
if check-evidence-for-reuse "${evidence_params[@]}" --output-path "${reused_evidence_json}"; then
  echo "Reusable evidence found. Skipping the test."
else
  # No reusable evidence: run the test and collect new evidence as usual
  run_my_tests
  collect-evidence "${evidence_params[@]}" --status "success"
fi