적용 대상:SQL Server
Azure SQL Database
Azure SQL Managed Instance
이 문서에서는 다양한 소프트웨어 배달 플랫폼에서 SQL 프로젝트에 대한 자동화 옵션의 개요를 제공합니다. 자동화를 사용하여 SQL 데이터베이스 프로젝트를 CI/CD 파이프라인에 통합하고 데이터베이스 변경 내용을 일관되고 반복적으로 배포합니다.
자동화할 내용
SQL 프로젝트 자동화에는 일반적으로 CI/CD 파이프라인의 두 가지 주요 작업이 포함됩니다.
SQL 프로젝트 빌드: 프로젝트의 유효성을 검사하고 컴파일할 SQL 데이터베이스 프로젝트에서 실행
dotnet build하여 배포 아티팩트(.dacpac)를 생성합니다. 필요에 따라 코드 분석 규칙을 실행하여 프로젝트 빌드 중에 코드 품질을 확인합니다..dacpac배포: SqlPackage 또는 플랫폼별 작업을 사용하여 대상 데이터베이스에 게시.dacpac합니다. 배포는 패브릭의 Azure SQL Database, Azure SQL Managed Instance, SQL Server 또는 SQL 데이터베이스를 대상으로 할 수 있습니다.
이러한 단계를 CI/CD 파이프라인에 통합하면 모든 커밋에서 데이터베이스 변경 내용의 유효성이 검사되고 환경 간에 일관되게 배포됩니다.
공통 개념
아티팩트 흐름: 일반적인 파이프라인은 빌드 및 배포 단계를 구분합니다. 빌드 단계에서는 SQL 프로젝트를 컴파일하고 파일을 생성 .dacpac 한 다음, 파이프라인 아티팩트로 게시합니다. 후속 배포 작업(수동 승인 후) 아티팩트가 다운로드되어 대상 데이터베이스에 배포됩니다. 이렇게 분리하면 한 번 빌드하고 동일한 아티팩트도 여러 환경에 배포하여 일관성을 보장할 수 있습니다.
게시 또는 스크립트: 중요한 환경에 배포하기 전에 배포 계획을 검토할 수 있습니다. SqlPackage는 Script 변경 내용을 적용하지 않고 배포 중에 실행되는 T-SQL 스크립트를 생성하는 작업을 지원합니다. 제공된 T-SQL 스크립트를 사용하면 데이터베이스 관리자 또는 검토자가 이전 승인을 적용 .dacpac 하는 데 필요한 정확한 변경 내용을 검사할 수 있습니다. 마찬가지로 이 DeployReport 작업은 계획된 변경 내용에 대한 XML 보고서를 생성합니다.
환경 승인 및 게이트: 프로덕션 배포에는 일반적으로 의도하지 않은 변경을 방지하기 위해 승인 워크플로가 필요합니다. GitHub Actions와 Azure DevOps는 모두 환경 기반 승인을 지원합니다. GitHub에서 필요한 검토자 및 대기 타이머 를 사용하여 환경을 구성할 수 있습니다. Azure DevOps에서 환경은 승인 게이트, 업무 시간 제한 및 기타 배포 제어를 지원합니다. 이러한 컨트롤은 프로덕션에 도달하기 전에 데이터베이스 변경 내용을 검토하고 승인하는 데 도움이 됩니다.
필수 조건
SqlPackage는 플랫폼 간이며 Windows, Linux 및 macOS에서 실행됩니다. 환경 전체에서 일관된 동작을 보장하기 위해 .NET 전역 도구로 설치합니다.
빌드 에이전트에 설치된 .NET SDK입니다.
빌드 에이전트에 설치된 SqlPackage입니다. SqlPackage를 .NET 전역 도구로 설치할 수 있습니다.
dotnet tool install --global microsoft.sqlpackage
소프트웨어 배달 플랫폼
팀의 도구, 규정 준수 및 연결 요구 사항과 일치하는 환경을 선택합니다.
관리되는 가상 환경
GitHub Actions 호스팅된 실행기 및 Azure Pipelines 에이전트에 대한 Microsoft 관리 가상 환경에는 사전 설치된 도구가 포함됩니다.
| 환경 | .NET SDK | SqlPackage |
|---|---|---|
| Windows | Preinstalled | Preinstalled |
| 리눅스 | Preinstalled | 사전 설치되지 않음 |
| macOS | Preinstalled | 사전 설치되지 않음 |
Linux 및 macOS 환경에서 워크플로의 일부로 SqlPackage를 설치합니다. 파이프라인의 SqlPackage 설치 및 버전 관리에 대한 자세한 내용은 개발 파이프라인의 SqlPackage를 참조하세요.
자체 호스팅 환경
다음과 같이 환경에 대한 더 많은 제어가 필요한 경우 자체 호스팅 실행기 또는 에이전트에서 배포합니다.
- 네트워크 격리 요구 사항(공용 인터넷에 노출되지 않는 데이터베이스에 액세스)
- 사용자 지정 도구 또는 특정 SqlPackage 버전
- 규정 준수 또는 보안 정책
자체 호스팅 실행기를 이벤트 기반 서버리스 실행을 위한 Azure Container Apps 작업 으로 배포할 수 있습니다. 이 방법을 사용하여 Dockerfile에서 환경을 정의하고 필요에 따라 SqlPackage 및 기타 도구를 설치합니다.
GitHub Actions (GitHub 액션)
Azure SQL 배포 작업(azure/sql-action)은 GitHub Actions 실행기에서 Azure SQL 및 SQL Server에 SQL 프로젝트 및 .dacpac 파일을 배포하기 위한 통합 환경을 제공합니다.
주요 기능:
- 또는 스크립트를
.dacpac.sqlproj.sql배포합니다. - SQL 인증, Microsoft Entra ID 인증 및 서비스 주체 인증을 지원합니다.
- 와 결합
azure/login하면 Azure SQL Database에 대한 임시 방화벽 규칙을 자동으로 추가 및 제거합니다. - Windows 및 Linux 실행기 모두에서 작동합니다.
예: GitHub Actions를 사용하여 SQL 프로젝트 배포
# .github/workflows/sql-deploy.yml
on: [push]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: azure/sql-action@v2
with:
connection-string: ${{ secrets.AZURE_SQL_CONNECTION_STRING }}
path: './Database.sqlproj'
action: 'publish'
임시 방화벽 규칙이 필요한 Azure SQL Database 배포의 azure/login 경우 다음 단계를 추가합니다 sql-action.
- uses: azure/login@v2
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- uses: azure/sql-action@v2
with:
connection-string: ${{ secrets.AZURE_SQL_CONNECTION_STRING }}
path: './Database.dacpac'
action: 'publish'
실행기에서 직접 SqlPackage를 사용할 수도 있습니다. 자세한 내용은 개발 파이프라인의 SqlPackage를 참조하세요.
Azure Pipelines (애저 파이프라인스)
Azure DevOps는 파일 및 SQL 스크립트를 Azure SQL Database에 배포하기 .dacpac 위한 SqlAzureDacpacDeployment 작업을 제공합니다.
주요 기능:
-
.dacpac파일을 배포하거나 SQL 스크립트를 실행합니다. - SQL 인증, Microsoft Entra ID 인증 및 서비스 주체 인증을 지원합니다.
- Azure SQL Database에 대한 방화벽 규칙을 자동으로 관리합니다.
- Windows 에이전트가 필요합니다(Linux 에이전트에서 직접 SqlPackage 사용).
예: Azure DevOps를 사용하여 .dacpac 배포
# azure-pipelines.yml
trigger:
- main
pool:
vmImage: 'windows-latest'
steps:
- task: SqlAzureDacpacDeployment@1
inputs:
azureSubscription: 'your-service-connection'
AuthenticationType: 'server'
ServerName: 'your-server.database.windows.net'
DatabaseName: 'your-database'
SqlUsername: '$(SqlUser)'
SqlPassword: '$(SqlPassword)'
deployType: 'DacpacTask'
DeploymentAction: 'Publish'
DacpacFile: '$(Build.ArtifactStagingDirectory)/Database.dacpac'
Linux 에이전트 또는 배포 프로세스에 대한 더 많은 제어의 경우 SqlPackage를 직접 사용합니다.
steps:
- task: UseDotNet@2
inputs:
packageType: 'sdk'
version: '8.x'
- script: dotnet tool install --global microsoft.sqlpackage
displayName: 'Install SqlPackage'
- script: |
sqlpackage /Action:Publish \
/SourceFile:$(Build.ArtifactStagingDirectory)/Database.dacpac \
/TargetConnectionString:"$(ConnectionString)"
displayName: 'Deploy database'
기타 CI/CD 플랫폼
GitLab CI/CD, Jenkins, CircleCI 등과 같은 플랫폼의 경우 SqlPackage를 직접 사용하여 SQL 프로젝트를 빌드하고 배포합니다.
프로젝트 빌드
dotnet build ./Database.sqlproj -c Release
다음을 배포합니다. .dacpac
sqlpackage /Action:Publish \
/SourceFile:./bin/Release/Database.dacpac \
/TargetConnectionString:"Server=your-server;Database=your-db;User Id=user;Password=password;"