개발 파이프라인의 SqlPackage
SqlPackage는 여러 데이터베이스 개발 작업을 자동화하고 CI/CD 파이프라인에 통합할 수 있는 명령줄 유틸리티입니다.
가상 환경
참고 항목
파이프라인 자동화를 위해 SQL Server Management Studio 또는 Visual Studio 등 다른 애플리케이션의 번들로 제공되는 SqlPackage 실행 파일을 사용하는 것보다 SqlPackage의 독립 실행형 설치를 활용하는 것이 좋습니다. SqlPackage의 독립 실행형 설치는 더 자주 업데이트되며 다른 애플리케이션의 릴리스 주기에 영향을 받지 않습니다.
Windows에서 SqlPackage의 독립 실행형 설치는 경로 C:\Program Files\Microsoft SQL Server\160\DAC\bin
(DacFx.msi) 또는 %USERPROFILE%\.dotnet\tools
(dotnet 도구)에서 수행할 수 있습니다. Linux에서 SqlPackage의 독립 실행형 설치는 경로 ~/.dotnet/tools
(dotnet 도구)에서 수행할 수 있습니다. Windows 및 Linux 환경에서 .NET Core용 자체 포함 .zip SqlPackage를 다운로드하는 경우 실행 파일을 선택한 위치로 추출할 수 있습니다.
관리되는 가상 환경
GitHub Actions가 호스트하는 실행기와 Azure Pipelines VM 이미지에 사용되는 가상 환경은 실행기 이미지 GitHub 리포지토리에서 관리됩니다. SqlPackage는 windows-latest
및 ubuntu-latest
를 비롯한 여러 환경에 포함되어 있습니다. 실행기 이미지에 있는 이미지의 업데이트는 SqlPackage가 릴리스될 때마다 몇 주 이내에 수행됩니다.
자체 호스팅 가상 환경
자체 호스팅 Azure DevOps 에이전트와 같은 자체 호스팅 가상 환경에서 정기적으로 애플리케이션 업데이트를 하여 환경을 최신 버전으로 유지합니다.
배포 추적
SqlPackage와 관련된 일부 파일을 캡처하여 파이프라인을 재현하고 배포 추적을 개선할 수 있습니다. 구현 및 사용 사례는 특정 아키텍처 및 자동화 환경에 따라 달라집니다.
- Dacpac 파일
- 모든 작업의 진단 파일 출력: 파이프라인 에이전트에서 SqlPackage 진단 가져오기를 참조하여 모든 SqlPackage 작업에서
/DiagnosticsFile:
매개 변수를 사용합니다. - 게시 작업 전 스크립트 작업의 출력: 게시 작업을 호출하기 전에 스크립트 SqlPackage 작업을 사용합니다.
기타 SqlPackage 예제
SqlPackage 버전 확인
문제 해결 활동 시 사용 중인 SqlPackage 버전을 알아야 합니다. /version
매개 변수로 SqlPackage를 실행하는 단계를 파이프라인에 추가하면 이 정보를 캡처할 수 있습니다. 예제는 Microsoft 및 GitHub 관리 환경에 따라 아래에 제공되며, 자체 호스팅 환경에서는 작업 디렉터리의 설치 경로가 다를 수 있습니다.
Azure Pipelines
Azure Pipeline에서 스크립트 키워드는 SqlPackage 버전 번호를 반환합니다.
- script: SqlPackage /version
workingDirectory: 'C:\Program Files\Microsoft SQL Server\160\DAC\bin\'
displayName: 'get sqlpackage version'
GitHub 작업
GitHub Action 워크플로에서 실행 키워드는 SqlPackage 버전 번호를 반환합니다.
- name: get sqlpackage version
working-directory: 'C:\Program Files\Microsoft SQL Server\160\DAC\bin\'
run: ./SqlPackage /version
파이프라인 에이전트에서 SqlPackage 진단 가져오기
SqlPackage의 진단 정보는 명령줄에서 /DiagnosticsFile
매개 변수를 통해 사용할 수 있습니다. 이 매개 변수는 Azure Pipelines 및 GitHub Actions와 같은 가상 환경에서 사용할 수 있습니다. 진단 정보는 작업 디렉터리의 파일에 기록됩니다. 파일 이름은 /DiagnosticsFile
매개 변수에 의해 결정됩니다.
Azure Pipelines
Azure Pipeline SqlAzureDacpacDeployment 구성의 '추가 SqlPackage 인수' 필드에 /DiagnosticsFile
매개 변수를 추가하면 SqlPackage 진단 정보가 지정된 파일에 기록됩니다. SqlAzureDacpacDeployment 작업을 수행하면 아래 예제에서 볼 수 있듯이 파이프라인 아티팩트를 게시하여 가상 환경 외부에서 진단 파일을 사용할 수 있습니다.
- task: SqlAzureDacpacDeployment@1
inputs:
azureSubscription: '$(azuresubscription)'
AuthenticationType: 'server'
ServerName: '$(servername)'
DatabaseName: '$(databasename)'
SqlUsername: '$(sqlusername)'
SqlPassword: '$(sqladminpassword)'
deployType: 'DacpacTask'
DeploymentAction: 'Publish'
DacpacFile: '$(Build.Repository.LocalPath)\$(dacpacname).dacpac'
AdditionalArguments: '/DiagnosticsFile:$(System.DefaultWorkingDirectory)/output.log'
IpDetectionMethod: 'AutoDetect'
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(System.DefaultWorkingDirectory)/output.log'
artifact: 'Diagnostic File'
publishLocation: 'pipeline'
파이프라인을 실행한 후 '게시된 아티팩트'의 실행 요약 페이지에서 진단 파일을 다운로드할 수 있습니다.
GitHub 작업
GitHub 작업 sql-action 구성의 '인수' 필드에 /DiagnosticsFile
매개 변수를 추가하면 SqlPackage 진단 정보가 지정된 파일에 기록됩니다. sql-action 작업을 수행하면 아래 예제에서 볼 수 있듯이 아티팩트를 게시하여 가상 환경 외부에서 진단 파일을 사용할 수 있습니다.
- name: Azure SQL Deploy
uses: Azure/sql-action@v2
with:
# The connection string, including authentication information, for the Azure SQL Server database.
connection-string: ${{ secrets.AZURE_SQL_CONNECTION_STRING }}
# Path to DACPAC file to deploy
path: .\DatabaseProjectAdventureWorksLT\bin\Release\DatabaseProjectAdventureWorksLT.dacpac
action: publish
# additional SqlPackage arguments
arguments: /DiagnosticsFile:DatabaseProjectAdventureWorksLT/DiagnosticLog.log
- uses: actions/upload-artifact@v2
with:
name: 'DiagnosticLog.txt'
path: 'DatabaseProjectAdventureWorksLT/DiagnosticLog.log'
파이프라인 에이전트에서 SqlPackage 업데이트
일부 시나리오에서는 파이프라인 환경에 설치된 SqlPackage의 현재 버전이 부적절할 수 있습니다. 환경을 직접 수정할 수 없는 경우 파이프라인을 실행하는 동안 추가 단계를 사용하여 최신 버전의 SqlPackage를 설치할 수 있습니다. 파이프라인에서 DacPac 또는 BacPac 작업을 실행하기 전에 설치 단계를 실행하는 것이 중요합니다. 버전 확인 단계와 함께 이 작업을 사용하면 업그레이드가 정상적으로 완료되었는지 확인할 수 있습니다.
Azure Pipelines
Azure 파이프라인에서 PowerShell 작업을 사용하면 원하는 MSI를 다운로드하고 자동으로 설치하는 단계를 Azure 파이프라인에 추가할 수 있습니다.
- task: PowerShell@2
displayName: 'upgrade sqlpackage'
inputs:
targetType: 'inline'
script: |
# use evergreen or specific dacfx msi link below
wget -O DacFramework.msi "https://aka.ms/dacfx-msi"
msiexec.exe /i "DacFramework.msi" /qn
다음 단계
- SqlPackage에 대해 자세히 알아봅니다.