가져오기 요청 파이프라인
풀 리퀘스트 파이프라인은 지정된 애플리케이션 저장소의 풀 리퀘스트에 대해 일련의 규정 준수 상태 검사를 수행합니다.
규제 준수 상태 검사에 실패하여 가져오기 요청을 마스터 분기로 병합하려는 시도가 차단될 수 있습니다. 마스터 분기에 대해 가져오기 요청을 열거나 업데이트하면 가져오기 요청 파이프라인 실행이 트리거됩니다. '사용자 정의 스크립트 '에서 파이프라인 및 테스트에 대한 자체 설정을 실행할 수 있습니다.
스테이지 및 태스크
다음 표에는 PR 파이프라인에서 실행되는 작업이 나열되어 있습니다. 또한 표에서는 이러한 각 단계에 대한 개요를 제공합니다.
-
태스크 또는 스테이지: 이는
.pipeline-config.yaml구성 파일에 정의된 스테이지의 이름을 참조합니다. -
간단한 설명: 스테이지 실행 중에 수행되는 조치에 대한 간결한 설명을 제공합니다.
-
사용자 정의 허용 가능: 사용자가
.pipeline-config.yaml파일에 사용자 정의 스크립트를 삽입하여 스테이지의 기본 동작을 수정하거나 바꿀 수 있는 유연성이 있는지 여부를 표시합니다. -
기본 참조 구현: DevSecOps 파이프라인에 미리 정의된 구현이 있는지 또는 기본 구현이 포함되어 있는지를 나타냅니다. 특히,
unit-tests또는setup과 같은 특정 단계의 경우, DevSecOps 파이프라인은 즉시 구현할 수 있는 기능을 제공하지 않습니다. 대신 사용자는 애플리케이션의 요구사항에 맞게 조정된 사용자 정의 스크립트 또는 코드를 제공해야 합니다. -
증거 콜렉션: 스테이지가 표준 증거의 콜렉션을 수행하는지 여부를 표시합니다. DevSecOps 파이프라인에서 단계에 대한 참조 구현을 제공하면 증거 수집이 즉시 수행됩니다. 그러나 사용자 가 이러한 사전 정의된 스테이지를 수정하거나 대체하도록 선택하는 경우 해당 사용자 정의 구현에 적절한 증거 콜렉션이 포함되어 있는지 확인해야 합니다. DevSecOps 파이프라인이 즉시 구현되지 않아 사용자가 증거 수집을 수행해야 하는 단계에 대해서도 동일한 책임이 사용자에게 있습니다. 이 열은 증거 콜렉션 수행을 담당하는 엔티티 (사용자/파이프라인) 를 표시합니다.
-
건너뛰기 허용 가능 (버전 > = v10에 적용 가능):
.pipeline-config.yaml에서 건너뛰기 특성을 true로 설정하여 사용자가 이 단계의 실행을 옵트 아웃할 수 있는지 여부를 표시합니다. 그러나 이 기능을 사용할 때 특히 증거를 수집하도록 설계된 단계에 대해 주의해야 합니다. 이러한 단계를 건너뛰면 빌드에 대한 필수 증거가 누락될 수 있습니다.
| 작업 또는 스테이지 | 간단한 설명 | .pipeline-config.yaml 에서 허용되는 사용자 정의 |
기본 참조 구현 | 증거 콜렉션 요구사항 | 허용되는 건너뛰기 |
|---|---|---|---|---|---|
start |
파이프라인 환경을 설정하십시오. | 아니오 | 예 | 해당사항 없음 | 아니오 |
setup |
빌드 및 테스트 환경을 설정하십시오. | 예 | 아니오 | 해당사항 없음 | 아니오 |
detect-secrets |
애플리케이션 코드에서 시크릿 발견 스캔을 실행합니다. | 예 | 예 | NA | 아니오 |
unit-tests |
앱 코드에서 단위 테스트 및 앱 테스트를 실행합니다. | 예 | 아니오 | NA | 예 |
compliance-checks |
앱 저장소에서 코드 위험 분석기 스캔 및 기타 준수 검사를 실행합니다. | 예 | 예 | NA | 예 |
finish |
파이프라인 상태를 통합합니다. | 예 | 예 | NA | 예 |
.pipeline-config.yaml 파일을 사용하여 스테이지를 사용자 정의하는 방법에 관한 자세한 정보는 사용자 정의 스크립트 및 파이프라인 매개변수를
참조하십시오.
시크릿 스캔 발견
IBM Detect Secrets 도구는 앱 코드에서 시크릿이 표시되는 위치를 식별합니다. 스캔을 위한 저장소 설정에 대한 자세한 정보는 여기 에서 사용 가능합니다.
규제 준수 검사에서 스캔 및 검사
| 스캔 또는 검사 | 설명 |
|---|---|
| Code Risk Analyzer 취약성 스캔 | 모든 앱 패키지 종속성, 컨테이너 기본 이미지, 운영 체제 패키지의 취약성을 찾습니다. Code Risk Analyzer 도구를 사용합니다. |
| Code Risk Analyzer CIS 검사 | Kubernetes 배치 Manifest에서 구성 검사 를 실행합니다. Code Risk Analyzer 도구를 사용합니다. |
| Code Risk Analyzer 명세서(BOM) 검사 | 모든 종속성의 가계도를 캡처하는 지정된 저장소의 BOM입니다. 이 BOM은 여러 단위로 수집됩니다. 예를 들어, BOM은 빌드에서 사용되는 기본 이미지의 목록, 기본 이미지의 패키지 목록, 기본 이미지 위에 설치된 앱 패키지의 목록을 캡처합니다. BOM은 분석 결과의 실지 검증 정보로 사용되며 잠재적으로 정책 게이트를 적용하는 데 사용될 수 있습니다. Code Risk Analyzer 도구를 사용합니다. |
| 리포지토리 규정 준수 확인 | 브랜치 보호 설정이 올바른지 확인합니다. |
이러한 스크립트는 파이프라인이 인식하는 모든 앱에서 실행됩니다. 이러한 스캔에 저장소를 추가하려면 setup 스테이지에서 제공되는 pipelinectl 인터페이스를 사용하십시오.
사용자 스크립트 스테이지의 예상 출력에 관한 자세한 정보는 사용자 정의 스크립트를 참조하십시오.
태스크 작업
| 태스크 작업 | 설명 |
|---|---|
code-pr-start |
앱 및 DevSecOps 저장소를 복제하고 Git Repos and Issue Tracking 저장소에서 상태 검사를 위해 초기 보류 상태를 설정합니다. |
code-setup |
사용자가 파이프라인 설정을 완료할 수 있는 사용자 정의 설정 사용자 정의 스크립트의 플레이스홀더입니다. |
code-detect-secrets |
시크릿 발견 스캔을 실행하여 앱 코드에서 시크릿이 표시되는 위치를 식별합니다. |
code-unit-tests |
사용자가 자체 테스트를 실행할 수 있는 사용자 정의 테스트 사용자 정의 스크립트의 플레이스홀더입니다. |
code-pr-finish |
필요한 모든 규제 준수 검사를 실행하고 가져오기 요청의 결과를 설명하며 Git Repos and Issue Tracking 저장소에 결과를 설정합니다. |
파이프라인 구성 리포지토리에 PR/MR 변경 사항 사용
PR 파이프라인이 PR/MR에서 오는 구성 파일/스크립트의 변경 사항을 고려해야 하는 경우, 아래와 같이 설정할 수 있는 구성 리포지토리와 브랜치가 비어 있어야 합니다:
- 환경 변수
one-pipeline-repo,one-pipeline-config-repo및pipeline-config-repo가 비어 있거나 환경 변수에 지정되지 않았습니다 one-pipeline-config-branch및pipeline-config-branch환경 변수가 비어 있거나 환경 변수에 지정되지 않았습니다.
문제가 있는 가져오기 요청 병합
관리자 권한을 사용하여 상태 검사에 실패한 가져오기 요청을 저장소에 병합할 수 있습니다. 하지만, 이러한 가져오기 요청은 실패한 태스크의 증거에 failure 결과를 등록합니다. 이 결과는 증거 요약 및 변경 요청 설명에 포함되어 있습니다.
PR 파이프라인에서 증거 수집 활성화
PR 파이프라인은 이슈 관리와 함께 증거 수집을 지원합니다. 기본적으로 PR 파이프라인은 증거를 수집하거나 이슈를 열지 않지만 사용자가 이 기능을 사용하도록 선택할 수 있습니다. 증거 수집 및 이슈 관리를 사용하려면 환경 변수 collect-evidence-in-pr 을 다음 열거형 중 하나로 설정하세요:
none: (기본값) PR 파이프라인에서 증거 수집을 방지하려면collect-evidence-in-pr를none으로 설정합니다.all: PR 파이프라인의 상태와 관계없이 모든 증거를 수집하려면collect-evidence-in-pr를all으로 설정합니다. 이슈는collect-evidence스크립트에 따라 열리거나 업데이트되거나 닫힙니다.success: 전체 PR 파이프라인이 성공적으로 실행된 경우에만 증거를 수집하도록collect-evidence-in-pr를success으로 설정합니다. PR 파이프라인이 실패하면 증거 자료가 수집되거나 증거 보관함에 게시되지 않으며 이슈 관리가 이루어지지 않습니다.
참고: PR 파이프라인은 일반적으로 매우 자주 실행되므로 collect-evidence-in-pr 의 올바른 모드를 선택하면 불필요한 증거 수집을 방지할 수 있습니다. 파이프라인이 실패할 경우 증거 수집을 방지하기 위해 개발 단계 또는 실패가 예상되는 경우 success 모드를 선택하는 것이 좋습니다.
PR 파이프라인이 비동기 파이프라인을 트리거하는 경우 collect-evidence-in-pr 모드로 설정된 success 는 지원되지 않습니다. PR 파이프라인이 비동기 파이프라인을 트리거하는 경우 증거를 수집하기 위해 collect-evidence-in-pr 을 all 로 설정합니다.
참고: 애플리케이션 저장소가 GitLab 저장소이고 기여되는 MR(병합 요청)이 포크된 저장소에서 온 경우, 사용자는 병합 요청에 적절한 상태를 설정하기 위해 소스 및 대상 저장소 모두에 접근할 수 있는 git-token 환경 변수 값을 제공해야 합니다. 이는 기트 토큰이 기본 저장소와 포크된 저장소 모두에 기여하는 사용자에게 속해야 하고, 토큰이 커밋 상태를 설정할 수 있는 권한을 가지고 있어야 한다는
것을 의미합니다.
PR에서 CVE 표면화
PR이 생성되고 PR 파이프라인에서 취약점이 발견되면 파이프라인은 심각도, 취약점 식별자, 패키지와 같은 취약점 정보와 함께 설명, 가능한 경우 수정 사항을 주석으로 추가합니다. 이를 통해 사용자는 파이프라인 로그를 살펴볼 필요 없이 PR에서 수정해야 할 취약점을 빠르게 확인할 수 있습니다.
옵트인 플래그 opt-in-pr-updates 를 사용하여 PR 파이프라인에서 이 기능을 활성화/비활성화할 수 있습니다. 이 기능은 기본적으로 활성화되어 있습니다.
깃허브 병합 대기열 PR을 처리하도록 PR 파이프라인 설정하기
병합 대기열은 바쁜 브랜치에 풀 리퀘스트 병합을 자동화하고 호환되지 않는 변경 사항으로 인해 브랜치가 중단되지 않도록 하여 속도를 높이는 데 도움이 되는 Github 기능입니다. Github 병합 대기열 설정 및 사용에 대한 자세한 내용은 여기를 참조하세요.
Merge Queue의 목적은 속도를 높이는 것이지만, 특정 Git PR의 경우 PR 파이프라인이 두 번 실행된다는 점을 고려해야 합니다. 즉, 먼저 “표준” PR이 실행됩니다. 작업이 완료되면 ‘Merge Queue PR’을 실행하십시오.
새 Git 트리거 만들기
Git 트리거를 새로 만들거나 기존 트리거를 복제합니다. 모든 기본 설정을 유지하고 다음 속성만 재정의합니다:
Name병합 대기열 컨텍스트를 반영하는 트리거 이름을 선호합니다(예:PR - Merge QueueEventListener선택pr-listener-merge-queueTrigger on선택CEL filterCEL filter입력body.action == 'checks_requested'
병합 대기열 PR은 원본 PR이 병합 대기열에 추가될 때 동적으로 생성되는 임시 브랜치를 사용하여 이 브랜치에서 병합 대기열 PR이 만들어집니다. 결과적으로, 해당 Git 이벤트 페이로드(풀 리퀘스트 파이프라인을 트리거하는)에는 PR URL 또는 HTML URL 에 대한 정보가 전혀 포함되어 있지 않습니다.
대기열 병합 컨텍스트와 관련이 없는 다음 DevSecOps 기능은 해당 텍스트 속성을 추가하여 비활성화해야 합니다:
skip-merge-pr-to-base를true(기본값 거짓)으로 설정해야 합니다opt-in-pr-updates를0(기본값 1)로 설정해야 합니다
트리거를 저장합니다.
병합 대기열 트리거 테스트
- 애플리케이션 소스 코드 리포지토리의 메인 브랜치에 대해 새 풀 리퀘스트를 만듭니다.
- 관찰: "표준" DevSecOps PR 파이프라인이 트리거됩니다
- PR 페이지에서
Merge when ready을 클릭한 다음Attempt merge when ready을 클릭하면 "표준" PR이 완료되면enqueuePR이 병합 대기열로 이동합니다. - "표준" DevSecOps PR이 성공적으로 완료될 때까지 기다립니다
- 관찰: PR 파이프라인이 완료되면 PR이 병합 대기열에 추가되고 병합 대기열 PR이 트리거됩니다:
- 대기열 병합 PR이 완료될 때까지 기다립니다
- 성공하면 PR은 다음과 같은 댓글과 병합됩니다
Merged via the queue into main with commit abcdefg - 성공하지 못한 경우(예: 규정 준수 검사 실패) PR은 자동 병합되지 않고 병합 대기열에서 제거됩니다.
PR 페이로드 개요
페이로드
페이로드는 이벤트 또는 요청의 일부로 전송되는 구조화된 데이터 블록(일반적으로 JSON 형식)을 설명하는 데 사용되는 일반적인 용어입니다. 페이로드는 일반적으로 웹훅, API 및 자동화 시스템에서 관련 정보를 기계가 읽을 수 있는 형태로 전달하기 위해 사용됩니다.
페이로드는 빌드 메타데이터, 사용자 활동, 이슈 업데이트 또는 이 경우 풀 리퀘스트 세부 정보 등 컨텍스트에 따라 다양한 콘텐츠를 나타낼 수 있습니다.
PR 페이로드
#cD-DEVSECOPS-PR-PAYLOAD
PR 페이로드는 풀 리퀘스트(PR)에 대한 메타데이터 및 컨텍스트 정보를 캡슐화하는 페이로드의 특정 인스턴스입니다. 풀 리퀘스트 이벤트가 발생할 때 생성되며 해당 PR과 관련된 주요 속성에 대한 구조화된 액세스를 제공합니다.
이 페이로드에는 다음과 같은 다양한 데이터가 포함됩니다:
- PR 제목 및 설명
- 작성자 및 리뷰어
- 소스(헤드) 및 대상(베이스) 브랜치
- 커밋 기록 및 SHA 참조
- 저장소 세부사항
- 타임스탬프, 레이블, 상태 등
전체 페이로드에는 광범위한 정보가 포함되어 있지만 현재 특정 필드 하위 집합만 추출되어 파이프라인, 스크립트 및 구성 파일에서 사용할 수 있는 환경 변수로 노출되고 있습니다.
PR 페이로드에서 추출한 환경 속성
현재 PR 페이로드에서 파생되어 활발하게 사용되는 환경 변수는 다음과 같습니다:
| 변수 이름 | 설명 |
|---|---|
head-branch |
PR의 소스 브랜치(병합 중인 브랜치) |
head-sha |
헤드 브랜치에 있는 최신 커밋의 커밋 SHA |
head-repo |
PR이 시작된 리포지토리 |
base-branch |
PR의 대상 브랜치(병합 중인 브랜치) |
base-repo |
기본 리포지토리에 대한 전체 참조 |
base-repo-name |
기본 저장소의 이름 |
base-repo-owner |
기본 리포지토리의 소유자(사용자 또는 조직) |
commit-timestamp |
PR에서 가장 최근 커밋의 타임스탬프입니다 |
pr-url |
풀 리퀘스트의 API URL |
pr-html-url |
풀 리퀘스트의 웹(HTML) URL |
pr-title |
풀 리퀘스트의 제목 |
action |
홍보 상태 |
base_ref |
pR의 대상 지점 |
이러한 값은 자동화된 워크플로우에서 실행 중 액세스를 간소화하기 위해 환경 변수로 주입됩니다.
PR 페이로드에는 위에 나열된 것 외에도 많은 추가 필드가 포함되어 있습니다. 그러나 현재 추출된 하위 집합만 운영 목적으로 활용되고 있습니다. 필요한 경우 고급 사용 사례 또는 향후 확장을 위해 전체 페이로드에 대한 액세스를 제공할 수 있습니다.