Skip to main content

GitHub Actions를 사용하여 배포

환경 및 동시성과 같은 기능을 사용하여 배포를 제어하는 방법을 알아봅니다.

참고: GitHub 호스트 실행기는 현재 GitHub Enterprise Server에서 지원되지 않습니다. GitHub public roadmap에 예정된 향후 지원에 대해 자세히 알아볼 수 있습니다.

소개

GitHub Actions은(는) 배포를 제어할 수 있는 기능을 제공합니다. 마케팅 목록의 구성원을 관리할 수 있습니다.

  • 다양한 이벤트를 사용하여 워크플로를 트리거합니다.
  • 작업을 진행하기 전에 규칙을 설정하고 비밀에 대한 액세스를 제한하도록 환경을 구성합니다.
  • 동시성을 사용하여 한 번에 실행되는 배포 수를 제어합니다.

지속적인 배포에 대한 자세한 내용은 "About continuous deployment with GitHub Actions"을 참조하세요.

필수 조건

GitHub Actions의 구문에 익숙해야 합니다. 자세한 내용은 "워크플로 작성"을(를) 참조하세요.

배포 트리거

다양한 이벤트를 사용하여 배포 워크플로를 트리거할 수 있습니다. 가장 일반적인 것은 pull_request, push, workflow_dispatch입니다.

예를 들어 다음 트리거가 있는 워크플로는 언제든 실행됩니다.

  • main 분기에 푸시가 있습니다.
  • main 분기를 대상으로 하는 끌어오기 요청이 열리거나 동기화되거나 다시 열립니다.
  • 누군가가 이를 수동으로 트리거합니다.
on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main
  workflow_dispatch:

자세한 내용은 "워크플로를 트리거하는 이벤트"을(를) 참조하세요.

환경 사용

환경은 일반적인 배포 대상(예: production, staging 또는 development)을 설명하는 데 사용됩니다. GitHub Actions 워크플로가 환경에 배포되면 환경이 리포지토리의 기본 페이지에 표시됩니다. 작업을 진행하기 위해 승인을 요구하거나 워크플로, 사용자 지정 배포 보호 규칙을 사용하여 게이트 배포를 트리거할 수 있는 분기를 제한하거나 비밀에 대한 액세스를 제한할 수 있습니다. 환경을 만드는 방법에 대한 자세한 내용은 "배포 환경 관리"을 참조하세요.

동시성 사용

동시성은 동일한 동시성 그룹을 사용하는 단일 작업 또는 워크플로만 한 번에 실행되도록 합니다. 환경에 최대 하나의 배포가 진행 중이고 한 번에 하나의 배포가 보류되도록 동시성을 사용할 수 있습니다. 동시성에 대한 자세한 내용은 "Control the concurrency of workflows and jobs"을 참조하세요.

참고: concurrencyenvironment는 연결되어 있지 않습니다. 동시성 값은 모든 문자열일 수 있습니다. 환경 이름이 될 필요는 없습니다. 또한 다른 워크플로가 동일한 환경을 사용하지만 동시성을 지정하지 않는 경우 해당 워크플로에는 동시성 규칙이 적용되지 않습니다.

예를 들어 다음 워크플로가 실행될 때 production 동시성 그룹을 사용하는 작업이나 워크플로가 진행 중인 경우 상태가 pending인 상태에서 일시 중지됩니다. 또한 production 동시성 그룹을 사용하고 상태가 pending인 모든 작업 또는 워크플로를 취소합니다. 즉, production 동시성 그룹을 사용하는 최대 하나의 실행 중인 작업 또는 하나의 보류 중인 작업 또는 워크플로가 있습니다.

name: Deployment

concurrency: production

on:
  push:
    branches:
      - main

jobs:
  deployment:
    runs-on: ubuntu-latest
    environment: production
    steps:
      - name: deploy
        # ...deployment-specific steps

작업 수준에서 동시성을 지정할 수도 있습니다. 이렇게 하면 동시 작업이 pending인 경우에도 워크플로의 다른 작업을 진행할 수 있습니다.

name: Deployment

on:
  push:
    branches:
      - main

jobs:
  deployment:
    runs-on: ubuntu-latest
    environment: production
    concurrency: production
    steps:
      - name: deploy
        # ...deployment-specific steps

동일한 동시성 그룹에서 현재 실행 중인 작업 또는 워크플로를 취소하는 데 cancel-in-progress를 사용할 수도 있습니다.

name: Deployment

concurrency:
  group: production
  cancel-in-progress: true

on:
  push:
    branches:
      - main

jobs:
  deployment:
    runs-on: ubuntu-latest
    environment: production
    steps:
      - name: deploy
        # ...deployment-specific steps

배포 관련 단계 작성에 대한 지침은 "배포 예제 찾기"를 참조하세요.

배포 기록 보기

GitHub Actions 워크플로가 환경에 배포되면 환경이 리포지토리의 기본 페이지에 표시됩니다. 환경에 대한 배포 보기에 대한 자세한 내용은 "배포 기록 보기"을 참조하세요.

워크플로 실행 모니터링

모든 워크플로 실행은 실행 진행률을 보여주는 실시간 그래프를 생성합니다. 이 그래프를 사용하여 배포를 모니터링하고 디버그할 수 있습니다. 자세한 내용은 "시각화 그래프 사용"을 참조하세요.

각 워크플로 실행의 로그와 워크플로 실행 기록을 볼 수도 있습니다. 자세한 내용은 "워크플로 실행 기록 보기"을(를) 참조하세요.

앱을 통한 배포 추적

배포 및 배포 상태 웹후크를 사용하여 배포를 추적하는 앱을 빌드할 수도 있습니다. 환경을 참조하는 워크플로 작업이 실행되면 환경 이름으로 설정된 environment 속성이 있는 배포 개체를 만듭니다. 워크플로가 진행됨에 따라 환경 이름으로 설정된 environment 속성, 환경의 URL로 설정된 environment_url 속성(워크플로에 지정된 경우), 작업의 상태로 설정된 state 속성이 있는 배포 상태 개체도 만듭니다. 자세한 내용은 "GitHub 앱 설명서" 및 "웹후크 이벤트 및 페이로드"을(를) 참조하세요.

실행기 선택

GitHub 호스트 실행기 또는 자체 호스트형 실행기에서 배포 워크플로를 실행할 수 있습니다. GitHub 호스트 실행기의 트래픽은 광범위한 네트워크 주소에서 올 수 있습니다. 내부 환경에 배포 중이고 회사에서 외부 트래픽을 개인 네트워크로 제한하는 경우 GitHub 호스트 실행기에서 실행되는 GitHub Actions 워크플로는 내부 서비스 또는 리소스와 통신하지 못할 수 있습니다. 이를 극복하기 위해 자체 실행기를 호스트할 수 있습니다. 자세한 내용은 "자체 호스트형 실행기 정보" 및 "GitHub 호스팅 실행기 사용"을(를) 참조하세요.

상태 배지 표시

상태 배지를 사용하여 배포 워크플로의 상태를 표시할 수 있습니다. 상태 배지는 워크플로가 현재 실패 중 또는 통과 중인지 보여줍니다. 상태 배지를 추가하는 일반적인 위치는 리포지토리의 README.md 파일이지만 원하는 웹 페이지에 추가할 수도 있습니다. 기본적으로 배지는 기본 분기의 상태를 표시합니다. URL의 branchevent 쿼리 매개 변수를 사용하여 특정 분기 또는 이벤트에 대한 워크플로 실행의 상태를 표시할 수도 있습니다.

워크플로 상태 배지의 스크린샷. 왼쪽에는 octocat 로고와 워크플로의 이름인 "GitHub Actions Demo"가 포함되어 있습니다. 오른쪽 절반은 녹색이며 "통과"라는 텍스트가 있습니다.

자세한 내용은 "워크플로 상태 배지 추가"을(를) 참조하세요.

배포 예제 찾기

이 문서에서는 배포 워크플로에 추가할 수 있는 GitHub Actions의 기능을 보여줍니다.

GitHub Enterprise Server는 Azure Web App과 같은 인기 있는 여러 서비스에 대한 배포 시작 워크플로를 제공합니다. 시작 워크플로로 시작하는 방법을 알아보려면 “Using workflow templates”을 참조하거나 배포 시작 워크플로의 전체 목록을 확인하세요. “Azure App Service에 Node.js 배포”과 같은 특정 배포 워크플로에 대한 자세한 가이드를 확인할 수도 있습니다.

또한 많은 서비스 공급자는 자사 서비스에 배포하기 위한 GitHub Marketplace에 대한 작업을 제공합니다. 전체 목록은 GitHub Marketplace를 참조하세요.