開発パイプラインでの SqlPackage

SqlPackage.exe は、さまざまなデータベース開発タスクを自動化するコマンドライン ユーティリティであり、CI/CD パイプラインに組み込むことができます。

マネージド仮想環境

GitHub Actions でホストされているランナーと Azure Pipelines VM イメージに使用される仮想環境は、virtual-environments GitHub リポジトリで管理されます。 SqlPackage は windows-latest 環境に含まれており、そのイメージへの更新は、それぞれの SqlPackage リリースの数週間以内に行われます。

SqlPackage のバージョンを確認する

トラブルシューティング作業中は、使用されている SqlPackage のバージョンを把握しておくことが重要です。 この情報の把握は、/version パラメーターを指定して SqlPackage を実行するステップをパイプラインに追加することで実行できます。 以下に示す例は、Microsoft と GitHub によって管理される環境に基づいており、自己ホスト型の環境では作業ディレクトリのインストール パスが異なっている場合があります。

Azure Pipelines

Azure パイプラインで script キーワードを使用することで、SqlPackage のバージョン番号を出力する手順を Azure パイプラインに追加できます。

- script: sqlpackage.exe /version
  workingDirectory: C:\Program Files\Microsoft SQL Server\150\DAC\bin\
  displayName: 'get sqlpackage version'

GitHub のアクション

GitHub アクション ワークフローで run キーワードを使用することで、SqlPackage のバージョン番号を出力する手順を GitHub アクションに追加できます。

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

ビルド番号 15.0.4897.1 を表示している GitHub アクションの出力表示

パイプライン エージェントでの SqlPackage 診断の取得

SqlPackage からの診断情報は、コマンド ラインでパラメーター /DiagnosticsFile を使用して取得できます。これは、Azure Pipelines や GitHub Actions などの仮想環境で使用できます。 診断情報は、作業ディレクトリ内のファイルに書き込まれます。 ファイル名は、/DiagnosticsFile パラメーターによって指定されます。

Azure Pipelines

Azure パイプライン SqlAzureDacpacDeployment 構成の "Additional SqlPackage.exe Arguments" フィールドに /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 構成の "arguments" フィールドに /DiagnosticsFile パラメーターを追加すると、SqlPackage 診断情報が指定されたファイルに書き込まれます。 sql-action タスクに従って、次の例に示すように、成果物を公開することで仮想環境の外部で診断ファイルを使用できるようになります。

- name: Azure SQL Deploy
  uses: Azure/sql-action@v1
  with:
    # Name of the Azure SQL Server name, like Fabrikam.database.windows.net.
    server-name: ${{ secrets.AZURE_SQL_SERVER }}
    # 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
    dacpac-package: .\DatabaseProjectAdventureWorksLT\bin\Release\DatabaseProjectAdventureWorksLT.dacpac
    # additional SqlPackage.exe 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

次のステップ