재고 변경 사항의 홍보 및 적용
DevSecOps 참조 구현을 사용하면 코드 변경사항이 프로덕션에 병합되고 승격되고 배치되기 전에 검토를 강제 실행할 수 있습니다. 보안 및 준수 소프트웨어 제공을 위한 피어 검토에 대해 자세히 알려면 피어 검토 준수 우수 사례 를 참조하십시오.
소스 분기에서 대상 분기로 인벤토리 항목 승격
인벤토리 리포지토리의 소스 브랜치에서 대상(스테이징, 프로덕션) 브랜치로 코드 변경 사항을 푸시하려면 다음 단계를 수행하십시오:
-
지속적 통합 파이프라인은 소스(마스터) 분기를 인벤토리 항목으로 채웁니다. 지속적 배포 승격 파이프라인을 사용하여 이 콘텐츠를 소스(master) 브랜치에서 대상(staging 또는 prod) 브랜치로 승격하십시오.
- cd-pipeline 대시보드에서 파이프라인 실행을 클릭하십시오.
- 수동 승격 트리거를 선택하십시오.
- 실행을 클릭하십시오. pipeline-run은 소스 분기에서 대상 분기로 코드 변경사항을 승격하기 위한 병합 요청을 작성합니다.
수동 프로모션 트리거 -
가져오기 요청을 승인하고 병합하십시오.
- pipeline-run을 클릭하고 승격 파이프라인의 실행 로그를 확인하십시오.
MR 실행 로그 - 병합 요청의 URL을 찾아 병합 요청을 여십시오.
- 필수 필드 (우선순위, 변경 요청 담당자, 추가 설명 및 기타 필드) 를 채우십시오.
- 병합 요청(MR)을 병합하여 소스 브랜치의 변경 사항을 대상 브랜치로 반영하세요.
이제 변경 사항이 대상 브랜치로 병합되었으므로, 지속적 배포 파이프라인을 사용하여 배포할 수 있습니다.
프로모션 유효성 검사 파이프라인 사용
프로모션 PR이 열리면 프로모션 유효성 검사 파이프라인에서 선택적으로 증거 집계 및 요약 생성을 수행하고 프로모션 풀/병합 요청(PR)에서 증거 상태를 설정할 수 있습니다. PR은 프로모션 파이프라인에서 생성하거나 인벤토리 리포지토리에서 수동으로 생성할 수 있습니다. 프로모션 유효성 검사 파이프라인에 대해 자세히 알아보세요.
소스 환경에서 대상 환경으로 변경사항 배치
소스 환경과 대상 환경은 지속적 배포 파이프라인 수준에서 정의됩니다.
지속적 배포 파이프라인의 트리거 설정 에 따라, 병합 요청이 병합된 후 파이프라인이 자동으로 실행되거나, 수동으로 병합될 수 있습니다. 파이프라인을 수동으로 병합하려면 파이프라인 실행을 클릭하고 실행할 트리거를 선택하십시오.
파이프라인은 파이프라인 실행 ID를 사용하여 인벤토리 저장소에서 현재 커미트를 시작하고 태그를 지정합니다. 파이프라인은 이 태그를 사용하여 대상 분기(프로덕션)에서 컨텐츠를 선택하고 현재 커미트와 마지막으로 성공한 배치의 컨텐츠 간의 배치 델타를 계산합니다. 델타는
태그로 표시되며, 여기서 target-environment 는 prod_latest 와 같은 연속 배포 파이프라인 속성에 설정된 값입니다.
파이프라인은 컨텐츠 배치를 시도합니다. 배치 중에 변경 요청 ID는 파이프라인이 태그로 작동하는 커미트에 첨부됩니다. 배포 단계나 작업이 성공적으로 완료되면, 파이프라인은 승격한 커밋에 <target-environment>_latest 태그를 추가함으로써 종료됩니다.
인벤토리 워크플로우에 대한 자세한 정보는 DevSecOps 파이프라인 이해를 참조하십시오.
인벤토리에서 이미지 위치 업데이트하기
이미지가 대상 컨테이너 레지스트리로 승격된 후, 인벤토리 내의 이미지 위치를 업데이트하여 승격된 이미지를 참조하도록 하십시오.
cocoa inventory update-locations 명령어를 사용하여 인벤토리 저장소의 아티팩트 위치를 업데이트하십시오.
cocoa inventory update-locations \
--name="${inventory_image_type}/inventory.json" \
--org="<org>" \
--repo="<repo-name>" \
--location="prod#${inventory_target_name}@${DIGEST}" \
--environment="master"
예를 들어, 다음과 같습니다.
cocoa inventory update-locations \
--name="<inventory-entry-name>/inventory.json" \
--org="<org-name>" \
--repo="<repo-name>" \
--location="prod#icr.io/.../baseimage:4.x.y@sha256:..." \
--environment="master"
--location 매개변수는 대상 이미지의 위치와 해당 이미지의 SHA-256 다이제스트를 지정합니다. 위치 정보는 다음과 같은 형식을 따릅니다:
<environment>#<image>:<tag>@sha256:<digest>
예를 들어, 다음과 같습니다.
prod#icr.io/<namespace>/<repository>/baseimage:4.x.y@sha256:<digest>
이미지 홍보 및 사인회
인벤토리를 업데이트하기 전에 이미지를 대상 레지스트리에 복사해야 하며, 대상 이미지 참조에 대한 유효한 서명이 있어야 합니다.
이미지를 승격하고 서명하는 후, 대상 레지스트리에서 해당 이미지의 다이제스트를 확보한 다음, cocoa inventory update-locations 에 해당 다이제스트를 입력하여 확인하십시오. {: important} 이미지가 승격되고 서명된 후 cocoa inventory update-locations 를 실행하십시오. 인벤토리에는 대상 레지스트리에 있는 이미지와 해당 이미지
다이제스트가 반드시 참조되어야 합니다.
승진 절차
릴리스 워크플로는 다음과 같습니다:
- 소스 레지스트리의 이미지를 대상 레지스트리로 이동시킵니다.
- 대상 레지스트리에서 홍보 대상 이미지의 다이제스트를 가져옵니다.
- 대상 이미지의 위치와 다이제스트를 지정하여
cocoa inventory update-locations를 실행합니다.
cocoa inventory update-locations 명령어는 인벤토리 메타데이터를 업데이트합니다. 컨테이너 이미지를 복사하거나 서명하지 않습니다.