在公關(PR)與犯罪調查(CI)流程中重複利用證據
預設情況下,當拉取請求 (PR) 或持續整合 (CI) 管線執行時,所有已設定的掃描和測試都會一併執行,即使正在 進行掃描或測試的儲存庫內容或映像檔自上次掃描或測試以來並未變更。 因此,每次執行時都會蒐集到新的證據。 這會浪費時間和資源。
DevSecOps Pipelines 提供了一項名為「證據重複使用」的選擇性功能,當待掃描或測試的儲存庫 內容或映像檔自上次掃描或測試以來並未變更時,即可跳過管道階段中的掃描或測試。 在這種情況下,既沒有進行掃描,也沒有進行測試運行,因此沒有蒐集到新的證據。 相反地,先前為掃描或檢測所蒐集的證據,會被調取並重複用於 CI、CD 和 CC 摘要中。 這能加快 PR 和 CI 流程 並優化資源使用效率。 當此功能啟用時,管線會驗證待測試或掃描的對象自上次執行以來是否有所變更。 若驗證成功,管線階段即可跳過該項測試或掃描,並採用先前所蒐集的證據與結果。
證據再利用的典型應用情境包括:
-
用例 1:
- 在 PR 管道中執行單元測試,並進行證據蒐集。
- 請使用您偏好的任何方法(rebase、squash 或一般合併)來合併此 PR。
- 如果從 PR 到 CI 流程執行期間,原始碼並未變更,則可跳過 CI 流程中的單元測試執行步驟。 從 PR 流程執行中擷取的單元測試結果,將被重新用於持續整合摘要。
-
用例 2:
- 執行包含證據蒐集的 PR 管道,或執行 CI 管道。
- 例如,其中一個管道階段(
compliance-check)因間歇性問題而失敗。 - 針對同一筆提交,重新執行 PR 或 CI 流程。
- 在重新執行時,會跳過已成功完成的掃描和測試,並從前一次執行中擷取相關記錄以供重複使用。
- 只有掃描失敗的執行程序會運行,並針對該執行程序收集新的證據。
若要啟用 PR 流程中的證據收集功能,請參閱「PR 流程中的證據收集」。
促進證據的再利用
若要在 PR 或 CI 流程中啟用證據重複使用功能,請將環境屬性 evidence-reuse 設定為 1``。 預設情況下,此屬性未啟用。
| 內容 | 說明 | 預設值 |
|---|---|---|
evidence-reuse |
將此參數設定為 1 以啟用證據重複使用功能。 |
未啟用 |
evidence-reuse-for-failure |
將此參數設為 1 ,即可同時重複使用失敗的證據。 請將此設定與 evidence-reuse=1 一起設定。 |
未啟用 |
evidence-validity-period |
可重複使用證據的時數上限。 | 24(最多 720,即 30 天) |
check-evidence-for-reuse 工具會檢查是否存在關於 asset-key、tool-type 及 evidence-type 這三項組合的證據,並 驗證該證據是否符合重複使用的條件。 如需更多資訊,請參閱 check-evidence-for-reuse。
如需完整的 CLI 指令參考及所有可用參數,請參閱 cocoa locker 證據再利用。
證據再利用的條件
check-evidence-for-reuse 工具會驗證以下條件:
- 這些證據是針對同一筆提交資產、儲存庫內容或映像資產所蒐集的。
- 該證據的狀態為「
success」。 任何其他狀態的證據均不會被納入重複使用考量,並會重新執行掃描。 這可確保當因某個階段發生間歇性故障而收集到故障證據時,重新執行該管線時不會重複使用該故障證據。 相反地,系統會執行新的掃描並蒐集新的證據。 然而,在某些情況下,這些未被採納的證據仍需被重新使用。 舉例來說,掃描結果發現 CI 管道中存在一處漏洞,因此必須以緊急部署的方式進行部署。 若要重新使用失敗的證據,除了設定evidence-reuse=1`` 之外,還需設定環境屬性evidence-reuse-for-failure=1。 - 該證據並非過時。 證據的蒐集日期仍在有效期內。 預設的有效期為 24 小時。 您可以透過環境屬性
evidence-validity-period(單位為小時)來設定管線執行的值。 該數值的上限為 720 小時(30 天)。 - 此外,該證據亦符合「詳細資訊」區段中儲存的任何配置檢查項目,例如工具版本或步驟基礎映像版本。
支援的工具與證據類型
DevSecOps 中相關的預設掃描腳本已進行更新,以便在啟用「證據重複使用」功能時,能夠重複使用證據。
支援證據重複使用的證據類型:
| 證明類型 | 可重複使用 |
|---|---|
com.ibm.static_scan |
是 |
com.ibm.dynamic_scan |
是 |
com.ibm.detect_secrets |
是 |
com.ibm.code_bom_check |
是 |
com.ibm.code_cis_check |
是 |
com.ibm.code_vulnerability_scan |
是 |
com.ibm.acceptance_tests |
是。 您必須更新您的自訂腳本。 |
com.ibm.unit_tests |
是。 您必須更新您的自訂腳本。 |
com.ibm.branch_protection |
否 |
com.ibm.pipeline_run_data |
否 |
com.ibm.peer_review |
否 |
請更新您的自訂腳本(例如單元測試和驗收測試),以便在啟用「證據重複使用」功能時,能夠重複使用相關證據。 若要在自訂腳本中採用證據重複使用功能,請參閱下一節。
在腳本中採用證據重複利用
若要在您的腳本中實作證據重複使用,請先檢查是否有可重複使用的證據。 以下偽代碼概述了如何檢查現有證據,並決定下一步該怎麼做。
虛擬程式碼
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
檢查是否有可供重複使用的證據
請使用 check-evidence-for-reuse 指令,並採用與 collect-evidence 腳本中相同的參數。 詳情請參閱 check-evidence-for-reuse。
當發現並儲存可重複使用的證據時,此指令會以 0 結束執行;若未發現,則以 1 結束執行。
範例用法
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