Menyiapkan build otomatis untuk aplikasi UWP Anda
Anda dapat menggunakan Azure Pipelines untuk membuat build otomatis untuk proyek UWP. Dalam artikel ini, kita akan melihat berbagai cara untuk melakukan ini. Kami juga akan menunjukkan kepada Anda cara melakukan tugas-tugas ini dengan menggunakan baris perintah sehingga Anda dapat berintegrasi dengan sistem build lainnya.
Membuat Alur Azure baru
Mulailah dengan mendaftar untuk Azure Pipelines jika Anda belum melakukannya.
Selanjutnya, buat alur yang dapat Anda gunakan untuk membangun kode sumber Anda. Untuk tutorial tentang membangun alur untuk membangun repositori GitHub, lihat Membuat alur pertama Anda. Azure Pipelines mendukung jenis repositori yang tercantum dalam artikel ini.
Menyiapkan build otomatis
Kita akan mulai dengan definisi build UWP default yang tersedia di Azure Dev Ops lalu menunjukkan kepada Anda cara mengonfigurasi alur.
Dalam daftar templat definisi build, pilih templat Platform Windows Universal.
Templat ini mencakup konfigurasi dasar untuk membangun proyek UWP Anda:
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'
Templat default mencoba menandatangani paket dengan sertifikat yang ditentukan dalam file .csproj. Jika Anda ingin menandatangani paket selama build, Anda harus memiliki akses ke kunci privat. Jika tidak, Anda dapat menonaktifkan penandatanganan dengan menambahkan parameter /p:AppxPackageSigningEnabled=false
ke bagian msbuildArgs
dalam file YAML.
Menambahkan sertifikat proyek Anda ke pustaka File aman
Anda harus menghindari pengiriman sertifikat ke repositori Anda jika memungkinkan, dan git mengabaikannya secara default. Untuk mengelola penanganan aman file sensitif seperti sertifikat, Azure DevOps mendukung fitur file aman.
Untuk mengunggah sertifikat untuk build otomatis Anda:
Di Azure Pipelines, perluas Alur di panel navigasi dan klik Pustaka.
Klik tab Amankan file lalu klik + File aman.
Telusuri ke file sertifikat dan klik OK.
Setelah Anda mengunggah sertifikat, pilih sertifikat untuk menampilkan propertinya. Di bawah Izin alur, aktifkan tombol Otorisasi untuk digunakan di semua alur .
Jika kunci privat dalam sertifikat memiliki kata sandi, kami sarankan Anda menyimpan kata sandi di Azure Key Vault lalu menautkan kata sandi ke grup variabel. Anda dapat menggunakan variabel untuk mengakses kata sandi dari alur. Perhatikan bahwa kata sandi hanya didukung untuk kunci privat; menggunakan file sertifikat yang dilindungi kata sandi saat ini tidak didukung.
Catatan
Mulai visual Studio 2019, sertifikat sementara tidak lagi dihasilkan dalam proyek UWP. Untuk membuat atau mengekspor sertifikat, gunakan cmdlet PowerShell yang dijelaskan dalam artikel ini.
Mengonfigurasi tugas build solusi Build
Tugas ini mengkompilasi solusi apa pun yang ada di folder kerja ke biner dan menghasilkan file paket aplikasi output. Tugas ini menggunakan argumen MSBuild. Anda harus menentukan nilai argumen tersebut. Gunakan tabel berikut sebagai panduan.
Argumen MSBuild | Nilai | Keterangan |
---|---|---|
AppxPackageDir | $(Build.ArtifactStagingDirectory)\AppxPackages | Menentukan folder untuk menyimpan artefak yang dihasilkan. |
AppxBundlePlatforms | $(Build.BuildPlatform) | Memungkinkan Anda menentukan platform yang akan disertakan dalam bundel. |
AppxBundle | Selalu | Membuat .msixbundle/.appxbundle dengan file .msix/.appx untuk platform yang ditentukan. |
UapAppxPackageBuildMode | StoreUpload | Menghasilkan file .msixupload/.appxupload dan folder _Test untuk sideloading. |
UapAppxPackageBuildMode | CI | Menghasilkan file .msixupload/.appxupload saja. |
UapAppxPackageBuildMode | SideloadOnly | Menghasilkan folder _Test untuk memuat samping saja. |
AppxPackageSigningEnabled | benar | Mengaktifkan penandatanganan paket. |
PackageCertificateThumbprint | Thumbprint sertifikat | Nilai ini harus cocok dengan thumbprint dalam sertifikat penandatanganan, atau menjadi string kosong. |
PackageCertificateKeyFile | Jalur | Jalur ke sertifikat yang akan digunakan. Ini diambil dari metadata file aman. |
PackageCertificatePassword | Kata sandi | Kata sandi untuk kunci privat dalam sertifikat. Kami menyarankan agar Anda menyimpan kata sandi di Azure Key Vault dan menautkan kata sandi ke grup variabel. Anda dapat meneruskan variabel ke argumen ini. |
Mengonfigurasi build
Jika Anda ingin membangun solusi dengan menggunakan baris perintah, atau dengan menggunakan sistem build lainnya, jalankan MSBuild dengan argumen ini.
/p:AppxPackageDir="$(Build.ArtifactStagingDirectory)\AppxPackages\\"
/p:UapAppxPackageBuildMode=StoreUpload
/p:AppxBundlePlatforms="$(Build.BuildPlatform)"
/p:AppxBundle=Always
Mengonfigurasi penandatanganan paket
Untuk menandatangani paket MSIX (atau .appx), alur perlu mengambil sertifikat penandatanganan. Untuk melakukan ini, tambahkan tugas DownloadSecureFile sebelum tugas VSBuild.
Ini akan memberi Anda akses ke sertifikat penandatanganan melalui signingCert
.
- task: DownloadSecureFile@1
name: signingCert
displayName: 'Download CA certificate'
inputs:
secureFile: '[Your_Pfx].pfx'
Selanjutnya, perbarui tugas VSBuild untuk mereferensikan sertifikat penandatanganan:
- 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)"'
Catatan
Argumen PackageCertificateThumbprint sengaja diatur ke string kosong sebagai tindakan pencegahan. Jika thumbprint diatur dalam proyek tetapi tidak cocok dengan sertifikat penandatanganan, build akan gagal dengan kesalahan: Certificate does not match supplied signing thumbprint
.
Meninjau parameter
Parameter yang ditentukan dengan $()
sintaksis adalah variabel yang ditentukan dalam definisi build, dan akan berubah dalam sistem build lainnya.
Untuk melihat semua variabel yang telah ditentukan sebelumnya, lihat Variabel build yang telah ditentukan sebelumnya.
Mengonfigurasi tugas Terbitkan Artefak Build
Alur UWP default tidak menyimpan artefak yang dihasilkan. Untuk menambahkan kemampuan penerbitan ke definisi YAML Anda, tambahkan tugas berikut.
- 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)'
Anda dapat melihat artefak yang dihasilkan di opsi Artefak dari halaman hasil build.
Karena kami telah mengatur UapAppxPackageBuildMode
argumen ke StoreUpload
, folder artefak menyertakan paket untuk pengiriman ke Store (.msixupload/.appxupload). Perhatikan bahwa Anda juga dapat mengirimkan paket aplikasi reguler (.msix/.appx) atau app bundle (.msixbundle/.appxbundle/) ke Store. Untuk tujuan artikel ini, kita akan menggunakan file .appxupload.
Mengatasi kesalahan bundel
Jika Anda menambahkan lebih dari satu proyek UWP ke solusi Anda lalu mencoba membuat bundel, Anda mungkin menerima kesalahan seperti ini.
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
Kesalahan ini muncul karena pada tingkat solusi, tidak jelas aplikasi mana yang akan muncul di bundel. Untuk mengatasi masalah ini, buka setiap file proyek dan tambahkan properti berikut di akhir elemen pertama <PropertyGroup>
.
Proyek | Properti |
---|---|
App | <AppxBundle>Always</AppxBundle> |
UnitTests | <AppxBundle>Never</AppxBundle> |
Kemudian, hapus AppxBundle
argumen MSBuild dari langkah build.