「Azure PipelinesのYAMLでXamarin.Forms製アプリのCI/CD環境を構築する」は3部構成です。
記事を順番に読み進めると、Azure PipelinesでXamarin.Forms製アプリのCI/CD環境が構築できるようになります。
第1部: CI環境の構築 ←イマココ
第2部: App Center配布パイプラインの構築
第3部: ストア配布パイプラインの構築
はじめに
本記事は Xamarin / MAUI Advent Calendar 2021 の1日目の記事です。
Azure Pipelinesを使い、Xamarin.Forms製アプリの単体テストを行うCIを構築します。
本記事で説明しないこと
- Azure Pipelinesの概要や基本的な操作方法
私が以前書いた記事 が参考になると思います
設定ファイルの構成
Azure PipelinesのYAMLでiOSアプリのCI環境を構築する方法 と同様なので省略します。
name
Azure PipelinesのYAMLでiOSアプリのCI環境を構築する方法 と同様なので説明は省略します。
trigger
Azure PipelinesのYAMLでiOSアプリのCI環境を構築する方法 と同様なので説明は省略します。
設定のみ紹介します。
trigger:
batch: true
branches:
include:
- main
- develop
paths:
exclude:
- Docs
- README.md
- LICENSE
schedules
Azure PipelinesのYAMLでiOSアプリのCI環境を構築する方法 と同様なので省略します。
設定のみ紹介します。
schedules:
- cron: "0 15 * * *"
displayName: Daily midnight build
branches:
include:
- main
- develop
always: true
variables
今回は使っていないので省略します。
jobs
ジョブを1つのみ用意しています。
test
単体テストを実行するジョブです。
dotnet test
コマンドで単体テストを実行し、Azure DevOps上にテスト結果とコードカバレッジを表示します。
xUnitを使っているので、 testResultsFormat
に xUnit
を指定しています。
steps:
# テスト
- task: DotNetCoreCLI@2
displayName: 'Dotnet test'
inputs:
command: test
projects: '$(System.DefaultWorkingDirectory)/{単体テストのプロジェクト}.csproj'
arguments: '--collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=json,cobertura,lcov,teamcity,opencover'
# テスト結果のアップロード
- task: PublishTestResults@2
displayName: 'Publish test results'
inputs:
testResultsFormat: 'xUnit'
testResultsFiles: '*.trx'
searchFolder: '$(Agent.TempDirectory)'
mergeTestResults: true
# コードカバレッジのアップロード
- task: PublishCodeCoverageResults@1
displayName: 'Publish code coverage report'
inputs:
codeCoverageTool: 'Cobertura'
summaryFileLocation: '$(Agent.TempDirectory)\*\coverage.cobertura.xml'
reportDirectory: '$(Build.SourcesDirectory)\TestResults\Coverage\Reports'
failIfCoverageEmpty: true
設定ファイルの全体図
最後に設定ファイルの全体図を載せます。
name: $(SourceBranchName)_$(Date:yyyyMMdd)$(Rev:.r)
trigger:
batch: true
branches:
include:
- main
- develop
paths:
exclude:
- Docs
- README.md
- LICENSE
schedules:
- cron: "0 15 * * *"
displayName: Daily midnight build
branches:
include:
- main
- develop
always: true
jobs:
- job: test
pool:
vmImage: 'windows-2019'
steps:
# テスト
- task: DotNetCoreCLI@2
displayName: 'Dotnet test'
inputs:
command: test
projects: '$(System.DefaultWorkingDirectory)/{単体テストのプロジェクト}.csproj'
arguments: '--collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=json,cobertura,lcov,teamcity,opencover'
# テスト結果のアップロード
- task: PublishTestResults@2
displayName: 'Publish test results'
inputs:
testResultsFormat: 'xUnit'
testResultsFiles: '*.trx'
searchFolder: '$(Agent.TempDirectory)'
mergeTestResults: true
# コードカバレッジのアップロード
- task: PublishCodeCoverageResults@1
displayName: 'Publish code coverage report'
inputs:
codeCoverageTool: 'Cobertura'
summaryFileLocation: '$(Agent.TempDirectory)\*\coverage.cobertura.xml'
reportDirectory: '$(Build.SourcesDirectory)\TestResults\Coverage\Reports'
failIfCoverageEmpty: true
シンプルなYAMLファイルなので、慣れれば読みやすいと思います。
おまけ: PR時にCIを回す
Azure PipelinesのYAMLでiOSアプリのCI環境を構築する方法 と同様なので省略します。
おわりに
Azure PipelinesのYAMLで基本的なXamarin.Forms製アプリのCIを回すことができました!
本記事の内容はXamarin.Forms固有の技術を使っておらず、xUnitを使っているプロジェクトなら適用できます。
逆にいうとXamarin.*を使ったクラスは単体テストが書きづらいです。
詳細は私が昨年のAdvent Calendarで書いた記事をご参照ください。
以上 Xamarin / MAUI Advent Calendar 2021 の1日目の記事でした。
明日は @ytabuchi さんの記事です。