커스텀 배포 보호 규칙 만들기

커스텀 배포 보호 규칙 만들기

GitHub Apps를 사용해 타사 시스템으로 배포 보호를 자동화하는 커스텀 배포 보호 규칙을 만드는 방법을 알아봐요. GitHub App을 등록·설치하고, deployment_protection_rule 웹훅에 응답해 배포를 승인하거나 거부할 수 있어요.

출처: 문서

본문

사전 요구 사항

Note

커스텀 배포 보호 규칙은 현재 공개 미리보기(public preview) 상태이며 변경될 수 있어요.

배포 보호 규칙에 대한 일반적인 정보는 GitHub Actions로 배포하기를 참고하세요.

GitHub Apps로 커스텀 배포 보호 규칙 만들기

  1. GitHub App을 만들어요. 자세한 내용은 GitHub App 등록하기를 참고하세요. GitHub App을 다음과 같이 구성해요.

    1. 선택적으로, "Identifying and authorizing users" 아래의 Callback URL 텍스트 필드에 콜백 URL을 입력해요. 자세한 내용은 사용자 인증 콜백 URL 정보를 참고하세요.
    2. "Permissions" 아래에서 Repository permissions을 선택해요.
    3. "Actions" 오른쪽에서 드롭다운 메뉴를 클릭하고 Access: Read-only을 선택해요. 새 GitHub App의 "Repository permissions" 섹션 스크린샷. Actions 권한이 "Read-only"로 표시되고 주황색으로 윤곽선이 그려져 있어요.
    4. "Deployments" 오른쪽에서 드롭다운 메뉴를 클릭하고 Access: Read and write을 선택해요. 새 GitHub App의 "Repository permissions" 섹션 스크린샷. Deployments 권한이 "Read and write"로 표시되고 주황색으로 윤곽선이 그려져 있어요.
    5. "Subscribe to events" 아래에서 Deployment protection rule을 선택해요. 새 GitHub App의 "Subscribe to events" 섹션 스크린샷. Deployment protection rule 체크박스가 주황색으로 윤곽선이 그려져 있어요.
  2. 저장소에 커스텀 배포 보호 규칙을 설치하고 사용하도록 활성화해요. 자세한 내용은 커스텀 배포 보호 규칙 구성하기를 참고하세요.

배포 승인 또는 거부하기

워크플로가 커스텀 배포 보호 규칙이 활성화된 환경을 참조하는 작업에 도달하면, GitHub는 구성한 URL로 deployment_protection_rule 페이로드를 담은 POST 요청을 보내요. 배포 보호 규칙을 작성해 deployment_protection_rule 페이로드를 기준으로 배포를 승인하거나 거부하는 REST API 요청을 자동으로 보낼 수 있어요. REST API 요청을 다음과 같이 구성해요.

커스텀 배포 보호 규칙은 워크플로 작업의 환경이 deployment: false로 설정된 경우 호환되지 않아요. 자세한 내용은 GitHub Actions로 배포하기를 참고하세요.

  1. 들어오는 POST 요청을 검증해요. 자세한 내용은 웹훅 전달 검증하기를 참고하세요.

  2. JSON Web Token을 사용해 GitHub App으로 인증해요. 자세한 내용은 GitHub App으로 인증하기를 참고하세요.

  3. deployment_protection_rule 웹훅 페이로드의 설치 ID(installation ID)를 사용해 설치 토큰을 생성해요. 자세한 내용은 GitHub App 인증 정보를 참고하세요.

    curl --request POST \
    --url "https://api.github.com/app/installations/INSTALLATION_ID/ACCESS_TOKENS" \
    --header "Accept: application/vnd.github+json" \
    --header "Authorization: Bearer ***" \
    --header "Content-Type: application/json" \
    --data \
    '{ \
       "repository_ids": [321], \
       "permissions": { \
          "deployments": "write" \
       } \
    }'
    
  4. 선택적으로, GitHub에 다른 조치를 취하지 않고 상태 보고만 추가하려면 /repos/OWNER/REPO/actions/runs/RUN_ID/deployment_protection_rulePOST 요청을 보내요. 요청 본문에서 state를 생략해요. 자세한 내용은 워크플로 실행을 위한 REST API 엔드포인트를 참고하세요. 같은 배포에 상태 보고를 최대 10번까지 게시할 수 있어요. 상태 보고는 Markdown 형식을 지원하며 최대 1024자까지 가능해요.

  5. 요청을 승인하거나 거부하려면 /repos/OWNER/REPO/actions/runs/RUN_ID/deployment_protection_rulePOST 요청을 보내요. 요청 본문에서 state 속성을 approved 또는 rejected로 설정해요. 자세한 내용은 워크플로 실행을 위한 REST API 엔드포인트를 참고하세요.

  6. 선택적으로, 워크플로 실행의 승인 상태를 요청하려면 /repos/OWNER/REPOSITORY_ID/actions/runs/RUN_ID/approvalsGET 요청을 보내요. 자세한 내용은 워크플로 실행을 위한 REST API 엔드포인트를 참고하세요.

  7. 선택적으로, GitHub에서 배포를 검토해요. 자세한 내용은 배포 검토하기를 참고하세요.

GitHub Marketplace에 커스텀 배포 보호 규칙 게시하기

GitHub App을 GitHub Marketplace에 게시해 개발자가 적합한 보호 규칙을 발견하고 자신의 GitHub 저장소에 설치할 수 있게 할 수 있어요. 또는 필요에 맞는 기존 커스텀 배포 보호 규칙을 둘러볼 수도 있어요. 자세한 내용은 앱을 위한 GitHub Marketplace 정보GitHub Marketplace에 앱 등록하기를 참고하세요.