Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Vous pouvez utiliser Azure Pipelines pour créer des builds automatisées pour les projets UWP. Dans cet article, nous allons examiner différentes façons de procéder. Nous allons également vous montrer comment effectuer ces tâches à l’aide de la ligne de commande afin que vous puissiez les intégrer avec n’importe quel autre système de construction.
Créer un nouveau pipeline Azure
Commencez par vous inscrire à Azure Pipelines si vous ne l’avez pas déjà fait.
Ensuite, créez un pipeline que vous pouvez utiliser pour générer votre code source. Pour obtenir un didacticiel sur la création d’un pipeline pour générer un dépôt GitHub, consultez Créer votre premier pipeline. Azure Pipelines prend en charge les types de référentiels répertoriés dans cet article.
Configurer une build automatisée
Nous allons commencer par la définition de build UWP par défaut disponible dans Azure Dev Ops, puis vous montrer comment configurer le pipeline.
Dans la liste des modèles de définition de build, choisissez le modèle Universal Windows Platform.
Ce modèle inclut la configuration de base pour générer votre projet 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'
Le modèle par défaut tente de signer le package avec le certificat spécifié dans le fichier .csproj. Si vous souhaitez signer votre package pendant la build, vous devez avoir accès à la clé privée. Sinon, vous pouvez désactiver la signature en ajoutant le paramètre /p:AppxPackageSigningEnabled=false à la msbuildArgs section du fichier YAML.
Ajouter votre certificat de projet à la bibliothèque de fichiers sécurisés
Vous devez éviter d’envoyer des certificats à votre dépôt si possible, et git les ignore par défaut. Pour gérer la gestion sécurisée des fichiers sensibles comme les certificats, Azure DevOps prend en charge la fonctionnalité fichiers sécurisés .
Pour charger un certificat pour votre build automatisée :
Dans Azure Pipelines, développez Pipelines dans le volet de navigation, puis cliquez sur Bibliothèque.
Cliquez sur l’onglet Fichiers sécurisés, puis sur + Fichier sécurisé.
Accédez au fichier de certificat, puis cliquez sur OK.
Après avoir chargé le certificat, sélectionnez-le pour afficher ses propriétés. Sous autorisations de pipeline, activez le basculement Autoriser pour utilisation dans tous les pipelines.
Si la clé privée du certificat a un mot de passe, nous vous recommandons de stocker votre mot de passe dans Azure Key Vault , puis de lier le mot de passe à un groupe de variables. Vous pouvez utiliser la variable pour accéder au mot de passe à partir du pipeline. Notez qu’un mot de passe est uniquement pris en charge pour la clé privée ; l’utilisation d’un fichier de certificat qui est lui-même protégé par mot de passe n’est pas pris en charge actuellement.
Remarque
À compter de Visual Studio 2019, un certificat temporaire n’est plus généré dans les projets UWP. Pour créer ou exporter des certificats, utilisez les applets de commande PowerShell décrites dans cet article.
Configurer la tâche de génération de la solution de Build
Cette tâche compile toute solution qui se trouve dans le dossier de travail dans les fichiers binaires et produit le fichier de package d’application de sortie. Cette tâche utilise des arguments MSBuild. Vous devez spécifier la valeur de ces arguments. Utilisez le tableau suivant comme référence.
| argument MSBuild | Valeur | Description |
|---|---|---|
| AppxPackageDir | $(Build.ArtifactStagingDirectory)\AppxPackages | Définit le dossier de stockage des artefacts générés. |
| AppxBundlePlatforms | $(Build.BuildPlatform) | Vous permet de définir les plateformes à inclure dans le bundle. |
| AppxBundle | Toujours | Crée un fichier .msixbundle/.appxbundle avec les fichiers .msix/.appx pour la plateforme spécifiée. |
| UapAppxPackageBuildMode | StoreUpload | Génère le fichier .msixupload/.appxupload et le dossier _Test pour l'installation manuelle. |
| UapAppxPackageBuildMode | Côte d'Ivoire | Génère uniquement le fichier .msixupload/.appxupload. |
| UapAppxPackageBuildMode | Chargement latéral uniquement | Génère le dossier _Test pour le chargement latéral uniquement. |
| AppxPackageSigningEnabled | vrai | Active la signature du package. |
| EmpreinteDuCertificatDuPaquet | Empreinte numérique du certificat | Cette valeur doit correspondre à l’empreinte numérique du certificat de signature, ou être une chaîne vide. |
| FichierCléCertificatDuPackage | Chemin | Chemin du certificat à utiliser. Il est extrait des métadonnées de fichier sécurisé. |
| MotDePasseDuCertificatDuPaquet | Mot de passe | Mot de passe de la clé privée dans le certificat. Nous vous recommandons de stocker votre mot de passe dans Azure Key Vault et de le lier à un groupe de variables. Vous pouvez passer la variable à cet argument. |
Configurer la compilation
Si vous souhaitez générer votre solution à l’aide de la ligne de commande ou à l’aide d’un autre système de génération, exécutez MSBuild avec ces arguments.
/p:AppxPackageDir="$(Build.ArtifactStagingDirectory)\AppxPackages\\"
/p:UapAppxPackageBuildMode=StoreUpload
/p:AppxBundlePlatforms="$(Build.BuildPlatform)"
/p:AppxBundle=Always
Configurer la signature du package
Pour signer le package MSIX (ou .appx), le pipeline doit récupérer le certificat de signature. Pour ce faire, ajoutez une tâche DownloadSecureFile avant la tâche VSBuild.
Vous aurez alors accès au certificat de signature par le biais de signingCert.
- task: DownloadSecureFile@1
name: signingCert
displayName: 'Download CA certificate'
inputs:
secureFile: '[Your_Pfx].pfx'
Ensuite, mettez à jour la tâche VSBuild pour référencer le certificat de signature :
- 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)"'
Remarque
Une chaîne vide est affectée intentionnellement à l’argument PackageCertificateThumbprint en guise de précaution. Si l’empreinte numérique est définie dans le projet, mais qu’elle ne correspond pas au certificat de signature, la génération échoue avec l’erreur : Certificate does not match supplied signing thumbprint.
Passer en revue les paramètres
Les paramètres définis avec la syntaxe $() sont des variables définies dans la définition de build. Ils sont différents dans d’autres systèmes de génération.
Pour afficher toutes les variables prédéfinies, consultez Variables de build prédéfinies.
Configurer la tâche Publier des artefacts de build
Le pipeline UWP par défaut n’enregistre pas les artefacts générés. Pour ajouter les fonctionnalités de publication à votre définition YAML, ajoutez les tâches suivantes.
- 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)'
Vous pouvez voir les artefacts générés dans l’option Artefacts de la page de résultats de la build.
Étant donné que nous avons défini l’argument à UapAppxPackageBuildModeStoreUpload, le dossier des artefacts inclut le package destiné à être soumis au Store (.msixupload/.appxupload). Notez que vous pouvez également envoyer un package d’application standard (.msix/.appx) ou un bundle d’applications (.msixbundle/.appxbundle/) dans le Windows Store. Pour les besoins de cet article, nous allons utiliser le fichier .appxupload.
Résoudre les erreurs de bundle
Si vous ajoutez plusieurs projets UWP à votre solution, puis essayez de créer un bundle, vous pouvez recevoir une erreur semblable à celle-ci.
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
Cette erreur s’affiche, car au niveau de la solution, il n’est pas clair quelle application doit apparaître dans le bundle. Pour résoudre ce problème, ouvrez chaque fichier projet et ajoutez les propriétés suivantes à la fin du premier <PropertyGroup> élément.
| Projet | Propriétés |
|---|---|
| Application | <AppxBundle>Always</AppxBundle> |
| UnitTests | <AppxBundle>Never</AppxBundle> |
Ensuite, supprimez l’argument AppxBundle MSBuild de l’étape de génération.