개발 파이프라인의 SqlPackage

SqlPackage는 여러 데이터베이스 개발 작업을 자동화하고 CI/CD 파이프라인에 통합할 수 있는 명령줄 유틸리티입니다.

가상 환경

참고 항목

파이프라인 자동화를 위해 SqlPackage의 독립 실행형 설치를 활용하는 것은 SQL Server Management Studio 또는 Visual Studio를 비롯한 다른 애플리케이션과 번들로 제공되는 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-latestubuntu-latest를 비롯한 여러 환경에 포함되어 있습니다. 실행기 이미지의 이미지에 대한 업데이트 각 SqlPackage 릴리스 후 몇 주 이내에 수행됩니다.

자체 호스팅 가상 환경

자체 호스팅 Azure DevOps 에이전트와 같은 자체 호스팅 가상 환경에서 SqlPackage를 활용하는 경우 정기적으로 애플리케이션을 업데이트하여 환경을 최신 버전으로 유지하는 것이 좋습니다.

배포 추적

파이프라인 실행 재현성을 만들고 배포 추적을 개선하기 위해 파이프라인 아티팩트로 캡처할 수 있는 몇 가지 SqlPackage 관련 파일이 있습니다. 구현 및 사용 사례는 특정 아키텍처 및 자동화 환경에 따라 달라집니다.

  • Dacpac 파일
  • 작업의 진단 파일 출력: SqlPackage 작업에서 /DiagnosticsFile: 매개 변수를 사용합니다. 아래 예를 참조하세요.
  • 게시 작업 전 스크립트 작업의 출력: 게시 작업을 호출하기 전에 스크립트 SqlPackage 작업을 사용합니다.

기타 SqlPackage 예제

SqlPackage 버전 확인

문제 해결 활동 시 사용 중인 SqlPackage 버전을 알아야 합니다. /version 매개 변수로 SqlPackage를 실행하는 단계를 파이프라인에 추가하면 이 정보를 캡처할 수 있습니다. 예제는 Microsoft 및 GitHub 관리 환경에 따라 아래에 제공되며, 자체 호스팅 환경에서는 작업 디렉터리의 설치 경로가 다를 수 있습니다.

Azure Pipelines

Azure Pipeline에서 script 키워드를 사용하면 SqlPackage 버전 번호를 출력하는 단계를 Azure Pipeline에 추가할 수 있습니다.

- script: SqlPackage /version
  workingDirectory: C:\Program Files\Microsoft SQL Server\160\DAC\bin\
  displayName: 'get sqlpackage version'

GitHub 작업

GitHub 작업 워크플로에서 run 키워드를 사용하면 SqlPackage 버전 번호를 출력하는 단계를 GitHub 작업에 추가할 수 있습니다.

- name: get sqlpackage version
  working-directory: C:\Program Files\Microsoft SQL Server\160\DAC\bin\
  run: ./SqlPackage /version

빌드 번호 15.0.4897.1을 표시하는 GitHub 작업 출력

파이프라인 에이전트에서 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

다음 단계