これはAzure DevOpsアドベントカレンダー20日目の記事です。
先月、セキュリティパッチや機能更新時に組織内アプリケーションを自動テスト環境を提供してくれるTestBase for Microsoft 365について紹介しました。
TestBaseにはREST APIも用意されていますので、CIで自動的にパッケージの展開が可能です。Microsoftから提供されているサンプルレポジトリもあります。
ただこれ、ちょっとアプリが古いようで、ローカルではビルドできるのですが、CIではできませんでした。アドバイスをもらいつつ直して設定を簡略化したものをforkしたレポジトリで公開しています。
実際にやってみましょう。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を作成したときに表示されたappIdとpasswordを保存しておきます。
Azure Pipelinesの設定

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

次はLibraryを作ります。公式の手順はもっとたくさん指定しているのですが、パイプラインを改造することで減らしました。先頭にあるAzureCoreOutputというのはAzure CLIの出力を抑制するオプションです。
ログイン時のサブスクリプションとかテナントを出したくないために指定しているのですが、すべての出力が抑制されるので注意してください。
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月くらいまで募集しているそうなので、毎月の互換テストつらいとか、今テストできてないから改善したいという方などぜひ回答してください。