워크플로를 사용하여 Azure Database for PostgreSQL에 데이터베이스 업데이트를 배포하여 GitHub Actions를 시작합니다.
필수 조건
필요 항목:
- 활성 구독이 있는 Azure 계정. 무료로 계정을 만듭니다.
- 샘플 데이터(
data.sql)가 있는 GitHub 리포지토리입니다. GitHub 계정이 없는 경우 평가판에 가입하세요. - Azure Database for PostgreSQL 유연한 서버 인스턴스.
- Azure Database for PostgreSQL을 만듭니다.
워크플로 파일 개요
GitHub Actions 워크플로는 사용자의 리포지토리에서 /.github/workflows/ 경로에 있는 YAML(.yml) 파일에 의해 정의됩니다. 이 정의는 워크플로를 구성하는 다양한 단계와 매개 변수를 포함합니다.
이 파일에는 섹션이 두 개 있습니다.
| 섹션 | 업무 |
|---|---|
| 인증 | 1. 배포 자격 증명을 생성합니다. |
| Deploy | 1. 데이터베이스를 배포합니다. |
배포 자격 증명 생성
OIDC로 Azure 로그인 작업을 사용하려면, 사용자가 페더레이션된 ID 자격 증명을 Microsoft Entra 애플리케이션 또는 사용자 할당 관리 ID에서 구성해야 합니다.
옵션 1: Microsoft Entra 애플리케이션
- Azure Portal, Azure CLI 또는 Azure PowerShell에서 서비스 주체를 사용하여 Microsoft Entra 애플리케이션을 만듭니다.
- 클라이언트 ID, 구독 ID 및 디렉터리(테넌트) ID의 값을 복사하여 나중에 GitHub Actions 워크플로에서 사용합니다.
- Azure Portal, Azure CLI 또는 Azure PowerShell을 사용해 사용자의 서비스 주체에 적절한 역할을 할당하세요.
- GitHub Actions에서 발급한 토큰을 GitHub 리포지토리에 신뢰하도록 Microsoft Entra 애플리케이션 에서 페더레이션 ID 자격 증명을 구성합니다.
옵션 2: 사용자 할당 관리 ID
- 사용자 할당 관리 ID 만들기.
- 클라이언트 ID, 구독 ID 및 디렉터리(테넌트) ID의 값을 복사하여 나중에 GitHub Actions 워크플로에서 사용합니다.
- 사용자 할당 관리 ID에 적절한 역할을 할당하세요.
- GitHub Actions에서 발급한 토큰을 GitHub 리포지토리에 신뢰하도록 사용자 할당 관리 ID에서 페더레이션 ID 자격 증명을 구성합니다.
Azure Database for PostgreSQL 연결 문자열 복사
Azure Portal에서 사용자의 Azure Database for PostgreSQL 유연한 서버 인스턴스로 이동한 다음, 리소스 메뉴의 설정 아래에서 연결을 선택하세요. 해당 페이지에서 데이터베이스 이름 콤보 상자를 사용하여 사용자가 연결하고자 하는 데이터베이스의 이름을 선택하세요.
앱에서 연결 섹션을 확장한 다음, ADO.NET 연결 문자열을 복사하고, 자리 표시자 값 {your_password}을(를) 사용자의 실제 암호로 교체하세요. 연결 문자열은 다음과 비슷한 형식입니다.
Server={servername.postgres.database.azure.com};Database={your_database};Port=5432;User Id={adminusername};Password={your_password};Ssl Mode=Require;
사용자는 이 연결 문자열을 GitHub 비밀로 사용합니다.
GitHub 비밀 구성하기
로그인 작업에 애플리케이션의 클라이언트 ID, 디렉터리(테넌트) ID 및 구독 ID 를 제공해야 합니다. 이러한 값은 워크플로에서 직접 제공하거나 GitHub 비밀에 저장하고 워크플로에서 참조할 수 있습니다. 값을 GitHub 비밀로 저장하는 것이 더 안전한 옵션입니다.
GitHub에서 리포지토리로 이동합니다.
보안 > 비밀 및 변수 > 작업을 선택합니다.
새 리포지토리 비밀을 선택합니다.
비고
공개 리포지토리에서 워크플로 보안을 강화하려면, 리포지토리 비밀 대신에 환경 비밀을 사용하세요. 환경에 승인이 필요한 경우 필수 검토자 중 한 명이 승인할 때까지 작업에서 환경 비밀에 액세스할 수 없습니다.
AZURE_CLIENT_ID,AZURE_TENANT_ID및AZURE_SUBSCRIPTION_ID에 대한 비밀을 만듭니다. GitHub 비밀에 대한 Microsoft Entra 애플리케이션 또는 사용자 할당 관리 ID에서 다음 값을 복사합니다.GitHub 비밀 Microsoft Entra 애플리케이션 또는 사용자 할당 관리 ID AZURE_CLIENT_ID 클라이언트 ID AZURE_SUBSCRIPTION_ID 구독 ID AZURE_TENANT_ID (Azure 테넌트 ID) 디렉터리(테넌트) ID 비고
보안상의 이유로 워크플로에 직접 값을 전달하는 대신 GitHub 비밀을 사용하는 것이 좋습니다.
사용자의 워크플로 추가하기
사용자의 GitHub 리포지토리에서 Actions로 이동합니다.
Set up your workflow yourself를 선택하세요.
워크플로 파일에서
on:섹션 이후에 있는 모든 항목을 삭제하세요. 예를 들어, 이후의 나머지 워크플로는 다음과 같을 수 있습니다.name: CI on: push: branches: [ main ] pull_request: branches: [ main ]PostgreSQL for GitHub Actions로 워크플로 이름을 바꾸고, 체크 아웃 및 로그인 작업을 추가하세요. 이러한 작업은 사이트 코드를 체크 아웃하며, 이전에 만든 GitHub 비밀을 사용하여 Azure를 통해 인증합니다.name: PostgreSQL for GitHub Actions on: push: branches: [ main ] pull_request: branches: [ main ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - uses: azure/login@v2 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}Azure Database for PostgreSQL 유연한 서버 인스턴스에 Azure PostgreSQL 배포 작업을 사용하여 연결하세요.
POSTGRESQL_SERVER_NAME을 사용자의 서버 이름으로 교체하세요. 리포지토리의 루트 수준에서 이름이 지정된data.sqlAzure Database for PostgreSQL 데이터 파일이 있어야 합니다.- uses: azure/postgresql@v1 with: connection-string: ${{ secrets.AZURE_POSTGRESQL_CONNECTION_STRING }} server-name: POSTGRESQL_SERVER_NAME plsql-file: './data.sql'Azure에서 로그아웃하는 작업을 추가하여 워크플로를 완성합니다. 완성된 워크플로는 다음과 같습니다. 사용자의 리포지토리의
.github/workflows폴더에 해당 파일이 표시됩니다.name: PostgreSQL for GitHub Actions on: push: branches: [ main ] pull_request: branches: [ main ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - uses: azure/login@v2 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - uses: azure/postgresql@v1 with: server-name: POSTGRESQL_SERVER_NAME connection-string: ${{ secrets.AZURE_POSTGRESQL_CONNECTION_STRING }} plsql-file: './data.sql' # Azure logout - name: logout run: | az logout
배포를 검토하기
자원을 정리하세요
Azure Database for PostgreSQL 데이터베이스 및 리포지토리가 더 이상 필요하지 않은 경우 리소스 그룹 및 GitHub 리포지토리를 삭제하여 배포한 리소스를 정리합니다.