Sdílet prostřednictvím


Nastavte automatizované buildy pro vaši UWP aplikaci

Azure Pipelines můžete použít k vytváření automatizovaných buildů pro projekty UPW. V tomto článku se podíváme na různé způsoby, jak to udělat. Ukážeme vám také, jak tyto úlohy provádět pomocí příkazového řádku, abyste se mohli integrovat s jakýmkoli jiným systémem sestavení.

Vytvoření nového kanálu Azure Pipeline

Začněte tím, že registraci ke službě Azure Pipelines, pokud jste to ještě neudělali.

Dále vytvořte kanál, který můžete použít k sestavení zdrojového kódu. Kurz vytvoření kanálu pro sestavení úložiště GitHub najdete v tématu Vytvoření prvního kanálu. Azure Pipelines podporuje typy úložišť uvedené v tomto článku.

Nastavení automatizovaného sestavení

Začneme s výchozí definicí sestavení UPW, která je dostupná v Azure Dev Ops, a ukážeme vám, jak kanál nakonfigurovat.

V seznamu šablon definic sestavení zvolte šablonu Univerzální platforma Windows.

Vyberte šablonu UPW

Tato šablona obsahuje základní konfiguraci pro sestavení projektu UPW:

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'

Výchozí šablona se pokusí podepsat balíček certifikátem zadaným v souboru .csproj. Pokud chcete balíček podepsat během sestavování, musíte mít přístup k privátnímu klíči. V opačném případě můžete podepisování zakázat přidáním parametru /p:AppxPackageSigningEnabled=false do oddílu msbuildArgs v souboru YAML.

Přidání certifikátu projektu do knihovny zabezpečených souborů

Pokud je to možné, měli byste se vyhnout odesílání certifikátů do úložiště a Git je ve výchozím nastavení ignoruje. Pro správu bezpečného zpracování citlivých souborů, jako jsou certifikáty, podporuje Azure DevOps funkci zabezpečených souborů.

Chcete-li nahrát certifikát pro automatizované sestavení:

  1. V Azure Pipelines rozklikněte Pipelines v navigačním podokně a klikněte na Knihovna.

  2. Klikněte na kartu Zabezpečené soubory a potom klikněte na + Zabezpečit soubor.

    snímek obrazovky Azure se zvýrazněnou možností

  3. Přejděte do souboru certifikátu a klikněte na OK.

  4. Po nahrání certifikátu ho vyberte a zobrazte jeho vlastnosti. V části Oprávnění potrubípovolte přepínač Autorizovat pro použití ve všech potrubích.

    snímek obrazovky s oddílem Oprávnění potrubí s vybranou možností autorizovat pro použití ve všech potrubích

  5. Pokud má privátní klíč v certifikátu heslo, doporučujeme uložit heslo do služby Azure Key Vault a pak heslo propojit se skupinou proměnných . Proměnnou můžete použít pro přístup k heslu z pipeline. Mějte na paměti, že heslo je podporováno pouze pro privátní klíč; použití souboru certifikátu, který je sám o sobě chráněný heslem, se v současné době nepodporuje.

Poznámka:

Od sady Visual Studio 2019 se v projektech UPW už negeneruje dočasný certifikát. K vytvoření nebo exportu certifikátů použijte rutiny PowerShellu popsané v tomto článku.

Konfigurujte úlohu sestavení řešení

Tato úloha zkompiluje jakékoli řešení, které je v pracovní složce, do binárních souborů a vytvoří výstupní soubor balíčku aplikace. Tato úloha používá argumenty MSBuild. Budete muset zadat hodnotu těchto argumentů. Jako vodítko použijte následující tabulku.

Argument pro MSBuild Hodnota Popis
AppxPackageDir $(Build.ArtifactStagingDirectory)\AppxPackages Definuje složku pro uložení vygenerovaných artefaktů.
AppxBundlePlatforms $(Build.BuildPlatform) Umožňuje definovat platformy, které se mají zahrnout do sady.
AppxBundle Vždy Vytvoří soubor .msixbundle/.appxbundle se soubory .msix/.appx pro zadanou platformu.
UapAppxPackageBuildMode (režim vytváření balíčku) StoreUpload Vygeneruje soubor .msixupload/.appxupload a složku _Test pro postranní načtení.
UapAppxPackageBuildMode CI Vygeneruje pouze soubor .msixupload/.appxupload.
UapAppxPackageBuildMode SideloadOnly Vygeneruje složku _Test pouze pro zkušební načtení.
Povolení podepisování balíčku Appx pravda Povolí podepisování balíčků.
OtiskCertifikátuBalíčku Otisk certifikátu Tato hodnota musí odpovídat kryptografickému otisku v podpisovém certifikátu nebo musí být prázdný řetězec.
SouborKlíčeCertifikátuBalíčku Cesta Cesta k certifikátu, který se má použít. Tato hodnota se načte z metadat zabezpečených souborů.
Heslo balíčku certifikátu Heslo Heslo pro privátní klíč v certifikátu. Doporučujeme uložit heslo ve službě Azure Key Vault a propojit ho se skupinou proměnných. Proměnnou můžete předat do tohoto argumentu.

Konfigurujte sestavení

Pokud chcete sestavit řešení pomocí příkazového řádku nebo pomocí jakéhokoli jiného systému sestavení, spusťte nástroj MSBuild s těmito argumenty.

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

Konfigurace podepisování balíčků

Pokud chcete podepsat balíček MSIX (nebo .appx), musí pipelina načíst podpisový certifikát. Uděláte to tak, že před úlohu VSBuild přidáte úlohu DownloadSecureFile. Tím získáte přístup k podpisovém certifikátu prostřednictvím signingCert.

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

Dále aktualizujte úlohu VSBuild tak, aby odkazovala na podpisový certifikát.

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

Poznámka:

Argument PackageCertificateThumbprint je záměrně nastaven na prázdný řetězec jako preventivní opatření. Pokud je v projektu nastaven otisk prstu, ale neodpovídá podpisovému certifikátu, dojde k chybě sestavení: Certificate does not match supplied signing thumbprint.

Kontrola parametrů

Parametry definované pomocí syntaxe $() jsou proměnné definované v definici sestavení a změní se v jiných systémech sestavení.

výchozí proměnné

Pokud chcete zobrazit všechny předdefinované proměnné, podívejte se na Předdefinované proměnné sestavení.

Nakonfigurujte úlohu Zveřejnění artefaktů sestavení

Výchozí kanál UPW neukládá vygenerované artefakty. Pokud chcete do definice YAML přidat možnosti publikování, přidejte následující úlohy.

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

Vygenerované artefakty můžete zobrazit v možnosti Artefakty na stránce výsledků sestavení.

artefakty

Vzhledem k tomu, že jsme nastavili argument UapAppxPackageBuildMode na StoreUpload, obsahuje složka artefaktů balíček pro odeslání do Storu (.msixupload/.appxupload). Mějte na paměti, že do Storu můžete odeslat také běžný balíček aplikace (.msix/.appx) nebo sadu aplikací (.msixbundle/.appxbundle/). Pro účely tohoto článku použijeme soubor .appxupload.

Řešení chyb balíčku

Pokud do řešení přidáte více než jeden projekt UPW a pak se pokusíte vytvořit sadu, může se zobrazit chyba podobná této.

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

Tato chyba se zobrazí, protože na úrovni řešení není jasné, která aplikace by se měla v sadě zobrazit. Pokud chcete tento problém vyřešit, otevřete každý soubor projektu a na konec prvního prvku <PropertyGroup> přidejte následující vlastnosti.

Projekt Vlastnosti
Aplikace <AppxBundle>Always</AppxBundle>
UnitTests <AppxBundle>Never</AppxBundle>

Poté odeberte argument AppxBundle MSBuild z kroku sestavení.