kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

Azure PipelinesからTestBase for Microsoft 365へデプロイして自動テストを実行する

これはAzure DevOpsアドベントカレンダー20日目の記事です。

qiita.com

先月、セキュリティパッチや機能更新時に組織内アプリケーションを自動テスト環境を提供してくれるTestBase for Microsoft 365について紹介しました。

kkamegawa.hatenablog.jp

TestBaseにはREST APIも用意されていますので、CIで自動的にパッケージの展開が可能です。Microsoftから提供されているサンプルレポジトリもあります。

github.com

ただこれ、ちょっとアプリが古いようで、ローカルではビルドできるのですが、CIではできませんでした。アドバイスをもらいつつ直して設定を簡略化したものをforkしたレポジトリで公開しています。

github.com

実際にやってみましょう。TestBaseのアカウントは前回の記事に従って作っているとします。

RBACの作成

az ad app create --display-name testbase-sample
az ad sp create-for-rbac -n testbase-sample --role "TestBase Write Role Assignments" --scopes /subscriptions/<subscirptionid>
az role definition update --role-definition \
{ \
  "Name": "TestBase Write Role Assignments", \
  "Description": "Perform Role Assignments",  \
  "Actions": [ \
     "Microsoft.Authorization/roleAssignments/write" \
     "Microsoft.TestBase/testBaseAccounts/*" \
  ], \
  "AssignableScopes": [ \
    "/subscriptions/<subscription>" \
  ] \
}

ServicePrincipalを作成したときに表示されたappIdpasswordを保存しておきます。

Azure Pipelinesの設定

先ほど作ったService Principalの情報でService Connectionを作ります。Pipelineに権限を与えるのを忘れずに…といっても、この時点ではパイプラインの名前が決まっていないので、allか与えないかしかないのですが。この鶏卵がもどかしい。

次はLibraryを作ります。公式の手順はもっとたくさん指定しているのですが、パイプラインを改造することで減らしました。先頭にあるAzureCoreOutputというのはAzure CLIの出力を抑制するオプションです。

learn.microsoft.com

ログイン時のサブスクリプションとかテナントを出したくないために指定しているのですが、すべての出力が抑制されるので注意してください。

Azure Pipelinesを作成して、forkしたGitHubのレポジトリのdeploy-to-testbase.ymlを指定します。なお、この辺をちょっと改良しています。

- task: AzureCLI@2
      inputs:
        azureSubscription: 'AzureTestBaseConnection'
        scriptType: 'pscore'
        scriptLocation: 'scriptPath'
        scriptPath: '$(build.SourcesDirectory)/Utilities/CICD/Azure-DevOps/CreateOrUpdatePackage.ps1'
        arguments: '-packagePath $(Build.ArtifactStagingDirectory)/drop/Calculator-$(build.BuildNumber).zip -applicationName $(Build.DefinitionName) -packageVersion $(Build.BuildNumber)'
        addSpnToEnvironment: true
        useGlobalConfig: true
        workingDirectory: '$(build.SourcesDirectory)/Utilities/CICD/Azure-DevOps/'
      env:
          RESOURCE_GROUP_NAME: $(resourceGroupName)
          TESTBASE_ACCOUNT_NAME: $(testBaseAccountName)
          AZURE_CORE_OUTPUT: $(AzureCoreOutput)

さらにtaskをAzureCLIに変更することで、envの環境変数が3つに減りした。これで実行すると、このようにパッケージがTestBaseに登録され、自動的にout-of-boxテストが行われます。

終わりに

TestBaseはまだCLIも標準のAzure Pipelinesタスクないので、REST APIを使うしかなく、まだまだつらいですが、環境を用意しなくてもマネージド環境で起動テストができるのは大変便利です。一度使ってみてください。

そして、ちょっとお願いですが、TestBaseを担当している製品グループから日本向けにこの製品が興味あるかどうかアンケートがあるそうです。アンケートの文面はすべて日本語になっています。3月くらいまで募集しているそうなので、毎月の互換テストつらいとか、今テストできてないから改善したいという方などぜひ回答してください。

forms.office.com