Delen via


Geautomatiseerde builds instellen voor uw UWP-app

U kunt Azure Pipelines gebruiken om geautomatiseerde builds te maken voor UWP-projecten. In dit artikel bekijken we verschillende manieren om dit te doen. We laten u ook zien hoe u deze taken uitvoert met behulp van de opdrachtregel, zodat u kunt integreren met elk ander buildsysteem.

Een nieuwe Azure-pijplijn maken

Meld u eerst aan voor Azure Pipelines als u dit nog niet hebt gedaan.

Maak vervolgens een pijplijn die u kunt gebruiken om uw broncode te bouwen. Zie voor een zelfstudie over het maken van een pijplijn voor een GitHub-opslagplaats Maak je eerste pijplijn. Azure Pipelines ondersteunt de typen opslagplaatsen die in dit artikel worden vermeld.

Een geautomatiseerde build instellen

We beginnen met de standaard-UWP-builddefinitie die beschikbaar is in Azure Dev Ops en laten u vervolgens zien hoe u de pijplijn configureert.

Kies in de lijst met builddefinitiesjablonen de sjabloon Universeel Windows-platform.

Selecteer de UWP-sjabloon

Deze sjabloon bevat de basisconfiguratie voor het bouwen van uw UWP-project:

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'

De standaardsjabloon probeert het pakket te ondertekenen met het certificaat dat is opgegeven in het .csproj-bestand. Als u uw pakket wilt ondertekenen tijdens de build, moet u toegang hebben tot de persoonlijke sleutel. Anders kunt u ondertekening uitschakelen door de parameter /p:AppxPackageSigningEnabled=false toe te voegen aan de sectie msbuildArgs in het YAML-bestand.

Uw projectcertificaat toevoegen aan de beveiligde bestandsbibliotheek

U moet indien mogelijk voorkomen dat u certificaten naar uw opslagplaats verzendt, en standaard negeert git ze. Voor het beheren van de veilige verwerking van gevoelige bestanden, zoals certificaten, ondersteunt Azure DevOps de functie voor beveiligde bestanden .

Een certificaat uploaden voor uw geautomatiseerde build:

  1. Vouw in Azure Pipelines Pipelines uit in het navigatiedeelvenster en klik op Bibliotheek.

  2. Klik op het tabblad Bestanden beveiligen en klik vervolgens op + Beveiligd bestand.

    Schermopname van Azure met de optie Bibliotheek gemarkeerd met de pagina Beveiligde bestanden.

  3. Blader naar het certificaatbestand en klik op OK.

  4. Nadat u het certificaat hebt geüpload, selecteert u het om de eigenschappen ervan weer te geven. Schakel onder Pijplijnmachtigingen de wisselknop Autoriseren in voor gebruik in alle pijplijnen .

    Schermopname van de sectie Pijplijnmachtigingen met de optie Autoriseren voor gebruik in alle pijplijnen geselecteerd.

  5. Als de persoonlijke sleutel in het certificaat een wachtwoord heeft, raden we u aan uw wachtwoord op te slaan in Azure Key Vault en het wachtwoord vervolgens te koppelen aan een variabele groep. U kunt de variabele gebruiken om toegang te krijgen tot het wachtwoord vanuit de pijplijn. Houd er rekening mee dat een wachtwoord alleen wordt ondersteund voor de persoonlijke sleutel; het gebruik van een certificaatbestand dat zelf met een wachtwoord is beveiligd, wordt momenteel niet ondersteund.

Opmerking

Vanaf Visual Studio 2019 wordt er geen tijdelijk certificaat meer gegenereerd in UWP-projecten. Als u certificaten wilt maken of exporteren, gebruikt u de PowerShell-cmdlets die in dit artikel worden beschreven.

De build-taak voor de build-oplossing configureren

Met deze taak wordt elke oplossing gecompileerd die zich in de werkmap bevindt voor binaire bestanden en het uitvoer-app-pakketbestand produceert. Deze taak maakt gebruik van MSBuild-argumenten. U moet de waarde van deze argumenten opgeven. Gebruik de volgende tabel als richtlijn.

MSBuild-argument Waarde Beschrijving
AppxPackageDir $(Build.ArtifactStagingDirectory)\AppxPackages Hiermee definieert u de map voor het opslaan van de gegenereerde artefacten.
AppxBundlePlatforms $(Build.BuildPlatform) Hiermee kunt u de platformen definiëren die in de bundel moeten worden opgenomen.
AppxBundle Altijd Hiermee maakt u een .msixbundle/.appxbundle met de .msix/.appx bestanden voor het opgegeven platform.
UapAppxPackageBuildMode StoreUpload Hiermee genereert u het .msixupload/.appxupload-bestand en de map _Test voor sideloading.
UapAppxPackageBuildMode CI Hiermee wordt alleen het .msixupload/.appxupload-bestand gegenereerd.
UapAppxPackageBuildMode SideloadOnly Hiermee wordt de folder _Test gegenereerd voor alleen sideloading.
AppxPackageSigningEnabled waar Schakelt pakketondertekening in.
Pakketcertificaatthumbprint Vingerafdruk van het certificaat Deze waarde moet overeenkomen met de vingerafdruk in het handtekeningcertificaat of een lege tekenreeks zijn.
PakketCertificaatSleutelBestand Pad Het pad naar het te gebruiken certificaat. Dit wordt opgehaald uit de metagegevens van het beveiligde bestand.
Pakketcertificaatwachtwoord Wachtwoord Het wachtwoord voor de persoonlijke sleutel in het certificaat. U wordt aangeraden uw wachtwoord op te slaan in Azure Key Vault- en het wachtwoord te koppelen aan variabelegroep. U kunt de variabele doorgeven aan dit argument.

De build configureren

Als u uw oplossing wilt bouwen met behulp van de opdrachtregel of met een ander buildsysteem, voert u MSBuild uit met deze argumenten.

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

Pakketondertekening configureren

Als u het MSIX-pakket (of .appx) wilt ondertekenen, moet de pijplijn het handtekeningcertificaat ophalen. Voeg hiervoor een DownloadSecureFile-taak toe voorafgaand aan de VSBuild-taak. Hiermee hebt u toegang tot het handtekeningcertificaat via signingCert.

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

Werk vervolgens de VSBuild-taak bij om te verwijzen naar het handtekeningcertificaat:

- 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)"'

Opmerking

Het argument PackageCertificateThumbprint is opzettelijk ingesteld op een lege tekenreeks als voorzorgsmaatregel. Als de vingerafdruk is ingesteld in het project, maar niet overeenkomt met het handtekeningcertificaat, mislukt de build met de volgende fout: Certificate does not match supplied signing thumbprint.

Parameters controleren

De parameters die zijn gedefinieerd met de $() syntaxis zijn variabelen die zijn gedefinieerd in de builddefinitie en worden gewijzigd in andere buildsystemen.

standaardvariabelen

Zie Vooraf gedefinieerde buildvariabelenom alle vooraf gedefinieerde variabelen weer te geven.

De taak Build-artefacten publiceren configureren

De standaard-UWP-pijplijn slaat de gegenereerde artefacten niet op. Als u de publicatiemogelijkheden wilt toevoegen aan uw YAML-definitie, voegt u de volgende taken toe.

- 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)'

U kunt de gegenereerde artefacten zien in de Artifacts optie van de pagina met buildresultaten.

artefacten

Omdat we het argument UapAppxPackageBuildMode hebben ingesteld op StoreUpload, bevat de map artefacten het pakket voor verzending naar de Store (.msixupload/.appxupload). Houd er rekening mee dat u ook een gewoon app-pakket (.msix/.appx) of een app-bundel (.msixbundle/.appxbundle/) kunt verzenden naar de Store. Voor het doel van dit artikel gebruiken we het .appxupload-bestand.

Bundelfouten aanpakken

Als u meer dan één UWP-project aan uw oplossing toevoegt en vervolgens probeert een bundel te maken, krijgt u mogelijk een foutmelding zoals deze.

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

Deze fout wordt weergegeven omdat op oplossingsniveau niet duidelijk is welke app in de bundel moet worden weergegeven. U kunt dit probleem oplossen door elk projectbestand te openen en de volgende eigenschappen toe te voegen aan het einde van het eerste <PropertyGroup>-element.

Project Eigenschappen
Applicatie <AppxBundle>Always</AppxBundle>
UnitTests <AppxBundle>Never</AppxBundle>

Verwijder vervolgens het argument AppxBundle MSBuild uit de buildstap.