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-check eines 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.

Tabelle 1. Eigenschaften zur Wiederverwendung von Belegen
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 Sie evidence-reuse-for-failure=1 zusätzlich zu die Umgebungseigenschaft fest evidence-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-period in 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:

Tabelle 3. Arten von Belegen und Unterstützung bei der Wiederverwendung
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