次の方法で共有


UWP アプリの自動ビルドを設定する

Azure Pipelines を使用して、UWP プロジェクト用の自動ビルドを作成できます。 この記事では、これを行うさまざまな方法について説明します。 また、他のビルド システムと統合できるように、コマンド ラインを使用してこれらのタスクを実行する方法についても説明します。

新しい Azure Pipeline を作成する

Azure Pipelines まだサインアップしていない場合は、まずサインアップします。

次に、ソース コードのビルドに使用できるパイプラインを作成します。 GitHub リポジトリを構築するためのパイプラインの構築に関するチュートリアルについては、「最初のパイプラインを作成する」を参照してください。 Azure Pipelines では、この記事に 記載されているリポジトリの種類がサポートされています。

自動ビルドを設定する

まず、Azure Dev Ops で使用できる既定の UWP ビルド定義から始めて、パイプラインを構成する方法について説明します。

ビルド定義テンプレートの一覧で、ユニバーサル Windows プラットフォーム テンプレート 選択します。

UWP テンプレートの を選択する

このテンプレートには、UWP プロジェクトをビルドするための基本的な構成が含まれています。

trigger:
- master

pool:
  vmImage: 'windows-latest'

variables:
  solution: '**/*.sln'
  buildPlatform: 'x86|x64|ARM'
  buildConfiguration: 'Release'
  appxPackageDir: '$(build.artifactStagingDirectory)\AppxPackages\\'

steps:
- task: NuGetToolInstaller@1

- task: NuGetCommand@2
  inputs:
    restoreSolution: '$(solution)'

- task: VSBuild@1
  inputs:
    platform: 'x86'
    solution: '$(solution)'
    configuration: '$(buildConfiguration)'
    msbuildArgs: '/p:AppxBundlePlatforms="$(buildPlatform)" /p:AppxPackageDir="$(appxPackageDir)" /p:AppxBundle=Always /p:UapAppxPackageBuildMode=StoreUpload'

既定のテンプレートは、.csproj ファイルで指定された証明書を使用してパッケージに署名しようとします。 ビルド中にパッケージに署名する場合は、秘密キーにアクセスできる必要があります。 それ以外の場合は、YAML ファイルの /p:AppxPackageSigningEnabled=false セクションにパラメーター msbuildArgs を追加することで、署名を無効にすることができます。

プロジェクト証明書を Secure Files ライブラリに追加する

可能であれば、リポジトリに証明書を送信しないようにする必要があります。git では既定で無視されます。 証明書などの機密性の高いファイルの安全な処理を管理するために、Azure DevOps では、セキュリティで保護されたファイル 機能がサポートされています。

自動ビルドの証明書をアップロードするには:

  1. Azure Pipelines で、ナビゲーション ペインの[パイプライン] を展開して、[ライブラリ]をクリックします。

  2. [ファイルのセキュリティ保護] タブをクリックし、[+ ファイルをセキュリティで保護する] をクリックします。

    [ファイルのセキュリティ保護] ページを示す [ライブラリ] オプションが強調表示されている Azure のスクリーンショット。

  3. 証明書ファイルを参照し、[OK]クリックします。

  4. 証明書をアップロードした後、証明書を選択して、そのプロパティを表示します。 [パイプラインのアクセス許可] で、[すべてのパイプラインで使用する 承認] 有効にします。

    [パイプラインのアクセス許可] セクションのスクリーンショット。[すべてのパイプラインで使用することを承認する] オプションが選択されています。

  5. 証明書の秘密キーにパスワードがある場合は、Azure Key Vault にパスワード 保存してから、パスワードを変数グループにリンクすることをお勧めします。 この変数を使用して、パイプラインからパスワードにアクセスできます。 パスワードは秘密キーでのみサポートされることに注意してください。それ自体がパスワードで保護されている証明書ファイルの使用は、現在サポートされていません。

Visual Studio 2019 以降では、UWP プロジェクトで一時的な証明書が生成されなくなります。 証明書を作成またはエクスポートするには、この記事ので説明されている PowerShell コマンドレット 使用します。

ビルド ソリューションのビルド タスクを構成する

このタスクは、作業フォルダー内にあるソリューションをバイナリにコンパイルし、出力アプリ パッケージ ファイルを生成します。 このタスクでは、MSBuild 引数を使用します。 これらの引数の値を指定する必要があります。 ガイドとして次の表を使用します。

MSBuild 引数 価値 説明
Appxパッケージディレクトリ $(Build.ArtifactStagingDirectory)\AppxPackages 生成された成果物を格納するフォルダーを定義します。
AppxBundlePlatforms $(Build.BuildPlatform) バンドルに含めるプラットフォームを定義できます。
AppxBundle(アプリバンドル) いつも 指定されたプラットフォームの .msix/.appx ファイルを使用して.msixbundle/.appxbundle を作成します。
UapAppx パッケージ ビルド モード ストアアップロード サイドローディング用の .msixupload/.appxupload ファイルと _Test フォルダーを生成します。
UapAppx パッケージ ビルド モード CI .msixupload/.appxupload ファイルのみを生成します。
UapAppx パッケージ ビルド モード SideloadOnly サイドローディング専用の _Test フォルダーを生成します。
AppxPackageSigningEnabled (アプリパッケージ署名の有効化) ほんとう パッケージ署名を有効にします。
パッケージ証明書サムプリント (PackageCertificateThumbprint) 証明書の拇印 この値は、署名証明書の拇印と一致しているか、空の文字列である必要があります
パッケージ証明書鍵ファイル 経路 使用する証明書へのパス。 これは、セキュリティで保護されたファイル メタデータから取得されます。
パッケージ証明書パスワード パスワード 証明書の秘密キーのパスワード。 パスワードを Azure Key Vault に保存し、パスワードを変数グループにリンクすることをお勧めします。 この引数に変数を渡すことができます。

ビルドを構成する

コマンド ラインを使用するか、他のビルド システムを使用してソリューションをビルドする場合は、これらの引数を指定して MSBuild を実行します。

/p:AppxPackageDir="$(Build.ArtifactStagingDirectory)\AppxPackages\\"
/p:UapAppxPackageBuildMode=StoreUpload
/p:AppxBundlePlatforms="$(Build.BuildPlatform)"
/p:AppxBundle=Always

パッケージ署名の構成

MSIX (または.appx) パッケージに署名するには、パイプラインで署名証明書を取得する必要があります。 これを行うには、VSBuild タスクの前に DownloadSecureFile タスクを追加します。 これにより、signingCert経由で署名証明書にアクセスできます。

- task: DownloadSecureFile@1
  name: signingCert
  displayName: 'Download CA certificate'
  inputs:
    secureFile: '[Your_Pfx].pfx'

次に、署名証明書を参照するように VSBuild タスクを更新します。

- task: VSBuild@1
  inputs:
    platform: 'x86'
    solution: '$(solution)'
    configuration: '$(buildConfiguration)'
    msbuildArgs: '/p:AppxBundlePlatforms="$(buildPlatform)" 
                  /p:AppxPackageDir="$(appxPackageDir)" 
                  /p:AppxBundle=Always 
                  /p:UapAppxPackageBuildMode=StoreUpload 
                  /p:AppxPackageSigningEnabled=true
                  /p:PackageCertificateThumbprint="" 
                  /p:PackageCertificateKeyFile="$(signingCert.secureFilePath)"'

PackageCertificateThumbprint 引数は、予防措置として意図的に空の文字列に設定されます。 拇印がプロジェクトで設定されていても、署名証明書と一致しない場合、ビルドは失敗し、次のエラーが表示されます。Certificate does not match supplied signing thumbprint

パラメーターを確認する

$() 構文で定義されたパラメーターは、ビルド定義で定義されている変数であり、他のビルド システムで変更されます。

既定の変数

すべての定義済みの変数を表示するには、「定義済みのビルド変数」をご覧ください。

ビルド成果物の発行タスクを構成する

既定の UWP パイプラインでは、生成された成果物は保存されません。 発行機能を YAML 定義に追加するには、次のタスクを追加します。

- task: CopyFiles@2
  displayName: 'Copy Files to: $(build.artifactstagingdirectory)'
  inputs:
    SourceFolder: '$(system.defaultworkingdirectory)'
    Contents: '**\bin\$(BuildConfiguration)\**'
    TargetFolder: '$(build.artifactstagingdirectory)'

- task: PublishBuildArtifacts@1
  displayName: 'Publish Artifact: drop'
  inputs:
    PathtoPublish: '$(build.artifactstagingdirectory)'

生成された成果物は、ビルド結果ページの [成果物] オプションで確認できます。

アーティファクト

UapAppxPackageBuildMode 引数を StoreUploadに設定しているため、成果物フォルダーには、Store (.msixupload/.appxupload) への申請用のパッケージが含まれています。 通常のアプリ パッケージ (.msix/.appx) またはアプリ バンドル (.msixbundle/.appxbundle/) をストアに送信することもできます。 この記事では、.appxupload ファイルを使用します。

バンドルエラーを解決する

ソリューションに複数の UWP プロジェクトを追加し、バンドルを作成しようとすると、次のようなエラーが表示されることがあります。

MakeAppx(0,0): Error : Error info: error 80080204: The package with file name "AppOne.UnitTests_0.1.2595.0_x86.appx" and package full name "8ef641d1-4557-4e33-957f-6895b122f1e6_0.1.2595.0_x86__scrj5wvaadcy6" is not valid in the bundle because it has a different package family name than other packages in the bundle

このエラーは、ソリューション レベルでは、バンドルに表示するアプリが明確ではないために表示されます。 この問題を解決するには、各プロジェクト ファイルを開き、最初の <PropertyGroup> 要素の末尾に次のプロパティを追加します。

プロジェクト プロパティ
アプリ <AppxBundle>Always</AppxBundle>
UnitTests <AppxBundle>Never</AppxBundle>

次に、AppxBundle MSBuild 引数をビルド ステップから削除します。