Wiederverwendung von Belegen in PR- und CI-Pipelines
Standardmäßig werden bei der Ausführung einer PR- oder CI-Pipeline stets alle konfigurierten Scans und Tests durchgeführt, auch wenn sich der Inhalt des Repositorys oder das Image, das gescannt oder getestet wird, seit dem letzten Scan oder Test nicht geändert hat Dadurch werden bei jedem Durchlauf neue Daten erfasst. Das verschwendet Zeit und Ressourcen.
DevSecOps-Pipelines bieten eine optionale Funktion namens Evidence Reuse, mit der der Scan oder Test in Pipeline-Phasen übersprungen werden kann, wenn sich der Inhalt des Repositorys oder das Image, das gescannt oder getestet wird, seit dem letzten Scan oder Test nicht geändert hat In diesem Fall finden keine Scans oder Testläufe statt, sodass keine neuen Nachweise gesammelt werden. Stattdessen werden die zuvor für den Scan oder Test gesammelten Daten abgerufen und in den CI-, CD- und CC-Zusammenfassungen wiederverwendet. Dies beschleunigt die PR- und CI-Pipelines und optimiert die Ressourcennutzung Wenn die Funktion aktiviert ist, überprüft die Pipeline, ob sich das, was getestet oder gescannt wird, seit dem letzten Durchlauf nicht geändert hat. Wenn die Validierung erfolgreich ist, können die Pipeline-Phasen den Test oder Scan überspringen und sich auf die zuvor gesammelten Nachweise und Ergebnisse stützen.
Typische Anwendungsfälle für die Wiederverwendung von Belegen sind:
-
Anwendungsfall 1:
- Führen Sie Unit-Tests in der PR-Pipeline mit Erfassung der Testdaten durch.
- Führen Sie den PR mit einer Methode Ihrer Wahl zusammen (Rebase, Squash oder reguläres Merge).
- Wenn sich der Quellcode zwischen den Durchläufen der PR- und CI-Pipeline nicht geändert hat, kann der Unit-Test-Durchlauf in der CI-Pipeline übersprungen werden. Die Ergebnisse der Unit-Tests aus dem PR-Pipeline-Lauf werden abgerufen und für die CI-Zusammenfassung wiederverwendet.
-
Anwendungsfall 2:
- Führen Sie die PR-Pipeline mit der Erfassung von Belegen durch oder führen Sie die CI-Pipeline durch.
- Eine der Pipeline-Stufen schlägt beispielsweise aufgrund
compliance-checkeines sporadisch auftretenden Problems fehl. - Führen Sie die PR- oder CI-Pipeline für denselben Commit erneut aus.
- Die erfolgreich durchgeführten Scans und Tests werden bei der Wiederholung übersprungen, und die entsprechenden Ergebnisse aus dem vorherigen Durchlauf werden abgerufen und wiederverwendet.
- Es werden nur die fehlgeschlagenen Scan-Läufe ausgeführt, und dafür werden neue Nachweise gesammelt.
Informationen zur Erfassung von Belegen in der PR-Pipeline finden Sie unter Erfassung von Belegen in der PR-Pipeline.
Wiederverwendung von Belegen ermöglichen
Um die Wiederverwendung von Nachweisen in der PR- oder CI-Pipeline zu aktivieren, setzen Sie die Umgebungseigenschaft evidence-reuse auf 1. Standardmäßig ist diese Eigenschaft nicht aktiviert.
| Eigenschaft | Beschreibung | Standard |
|---|---|---|
evidence-reuse |
Auf einstellen, 1 um die Wiederverwendung von Belegen zu ermöglichen. |
Nicht aktiviert |
evidence-reuse-for-failure |
Setzen Sie auf, 1 um auch fehlgeschlagene Nachweise wiederzuverwenden. Fügen Sie dies zusätzlich zu … ein evidence-reuse=1. |
Nicht aktiviert |
evidence-validity-period |
Anzahl der Stunden, innerhalb derer Nachweise wiederverwendet werden können. | 24 (maximal 720, was 30 Tagen entspricht) |
Das Tool check-evidence-for-reuse prüft, ob Nachweise für die Kombination aus asset-key, tool-type, und vorliegen evidence-type, und überprüft, ob die Nachweise die Bedingungen für die Wiederverwendung
erfüllen Weitere Informationen finden Sie unter check-evidence-for-reuse.
Die vollständige CLI-Befehlsreferenz und alle verfügbaren Parameter finden Sie unter cocoa locker evidence reuse.
Bedingungen für die Wiederverwendung von Belegen
Das Tool check-evidence-for-reuse überprüft die folgenden Bedingungen:
- Die Nachweise wurden für dasselbe Commit-Asset, denselben Repo-Inhalt oder dasselbe Image-Asset gesammelt.
- Der Evidenzstatus lautet
success. Nachweise mit einem anderen Status werden nicht für die Wiederverwendung berücksichtigt, und es wird ein neuer Scan durchgeführt. Dadurch wird sichergestellt, dass bei der Erfassung von Fehlerdaten aufgrund eines sporadisch auftretenden Fehlers in einer Phase diese Fehlerdaten bei einer erneuten Ausführung der Pipeline nicht erneut verwendet werden. Stattdessen wird ein neuer Scan durchgeführt und es werden neue Beweise gesammelt. In einigen Fällen müssen die fehlgeschlagenen Nachweise jedoch wiederverwendet werden. Beispiel: Bei einem Scan wurde eine Sicherheitslücke in der CI-Pipeline entdeckt, und die Änderung muss als Notfall-Deployment bereitgestellt werden. Um die fehlgeschlagenen Nachweise wiederzuverwenden, legen Sieevidence-reuse-for-failure=1zusätzlich zu die Umgebungseigenschaft festevidence-reuse=1. - Die Informationen sind aktuell. Das Datum der Beweiserhebung liegt innerhalb der Gültigkeitsdauer. Die Standardgültigkeitsdauer beträgt 24 Stunden. Sie können den Wert für einen Pipeline-Lauf mithilfe der Umgebungseigenschaft (
evidence-validity-periodin Stunden) konfigurieren. Der Wert ist auf maximal 720 Stunden (30 Tage) begrenzt. - Optional stimmen die Nachweise mit den im Abschnitt Details gespeicherten Konfigurationsprüfungen überein, wie beispielsweise der Tool-Version oder der Version des Basis-Images für den Schritt.
Unterstützte Tools und Belegarten
Die in DevSecOps verwendeten Standard-Scan-Skripte wurden aktualisiert, um die Wiederverwendung von Nachweisen zu ermöglichen, sofern diese Funktion aktiviert ist.
Belegtypen, für die die Wiederverwendung von Belegen unterstützt wird:
| Angabentyp | Können wiederverwendet werden |
|---|---|
com.ibm.static_scan |
Ja |
com.ibm.dynamic_scan |
Ja |
com.ibm.detect_secrets |
Ja |
com.ibm.code_bom_check |
Ja |
com.ibm.code_cis_check |
Ja |
com.ibm.code_vulnerability_scan |
Ja |
com.ibm.acceptance_tests |
Ja. Sie müssen Ihr benutzerdefiniertes Skript aktualisieren. |
com.ibm.unit_tests |
Ja. Sie müssen Ihr benutzerdefiniertes Skript aktualisieren. |
com.ibm.branch_protection |
Nein |
com.ibm.pipeline_run_data |
Nein |
com.ibm.peer_review |
Nein |
Aktualisieren Sie Ihre benutzerdefinierten Skripte, wie z. B. Unit-Tests und Abnahmetests, damit die Wiederverwendung von Nachweisen möglich ist, sobald diese Funktion aktiviert ist. Informationen zur Wiederverwendung von Evidenz in Ihren benutzerdefinierten Skripten finden Sie im folgenden Abschnitt.
Wiederverwendung von evidence in Skripten
Um die Wiederverwendung von Nachweisen in Ihren Skripten zu implementieren, prüfen Sie zunächst, ob wiederverwendbare Nachweise verfügbar sind. Der folgende Pseudocode beschreibt, wie man nach vorhandenen Hinweisen sucht und den nächsten Schritt festlegt.
Pseudocode
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
Prüfen, ob Belege zur Wiederverwendung verfügbar sind
Verwenden Sie den Befehl check-evidence-for-reuse mit denselben Parametern, die Sie im Skript collect-evidence verwenden. Weitere Informationen finden Sie unter check-evidence-for-reuse.
Der Befehl wird mit beendet, wenn 0 wiederverwendbare Nachweise gefunden und gespeichert wurden, und mit, 1 wenn keine gefunden wurden.
Beispielverwendung
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