PR 및 CI 파이프라인 전반에 걸친 증거의 재사용
기본적으로 PR 또는 CI 파이프라인이 실행되면, 스캔이나 테스트 대상인 리포지토리 콘텐츠나 이미지가 지난번 스캔이나 테스트 이후 변경되지 않았더라도, 구성된 모든 스캔과 테스트가 항상 실행됩니다. 그 결과, 실행할 때마다 새로운 증거가 수집됩니다. 이는 시간과 자원을 낭비하게 됩니다.
DevSecOps 파이프라인은 ‘증거 재사용(Evidence Reuse )’이라는 선택적 기능을 제공하여, 스캔 또는 테스트 대상인 리포지토리 콘텐츠나 이미지가 마지막 스캔 또는 테스트 이후 변경되지 않은 경우 파이프라인 단계에서 해당 스캔이나 테스트를 건너뛸 수 있게 합니다. 이 경우, 스캔이나 테스트 실행이 이루어지지 않으므로 새로운 증거가 수집되지 않습니다. 대신, 이전에 스캔이나 테스트를 위해 수집된 증거 자료를 가져와 CI, CD, CC 요약에 재사용합니다. 이를 통해 PR 및 CI 파이프라인의 속도가 빨라지고 리소스 사용이 최적화됩니다. 이 기능이 활성화되면, 파이프라인은 테스트 또는 스캔 대상에 대해 이전 실행 이후 변경 사항이 없는지 확인합니다. 검증이 성공하면, 파이프라인 단계들은 해당 테스트나 스캔을 건너뛰고 이전에 수집된 증거와 결과를 활용할 수 있습니다.
증거 재사용의 대표적인 사용 사례는 다음과 같습니다:
-
사용 사례 1:
- 증거 수집 기능을 사용하여 PR 파이프라인에서 단위 테스트를 실행합니다.
- 원하는 방식(리베이스, 스쿼시 또는 일반 병합)으로 PR을 병합하세요.
- PR과 CI 파이프라인 실행 사이에 소스 코드가 변경되지 않았다면, CI 파이프라인에서 수행되는 단위 테스트는 건너뛸 수 있습니다. PR 파이프라인 실행에서 얻은 단위 테스트 결과가 가져와져 CI 요약에 재사용됩니다.
-
사용 사례 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 evidence reuse’를 참조하십시오.
증거의 재사용 조건
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
재사용할 수 있는 증거 자료가 있는지 확인하십시오
collect-evidence 스크립트에서 사용하는 것과 동일한 매개변수를 지정하여 check-evidence-for-reuse 명령을 실행하십시오. 자세한 내용은 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