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.
| 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 ambienteevidence-reuse-for-failure=1oltre aevidence-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:
| 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