Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Pomocí GitHub Actions můžete nastavit sestavení kontinuální integrace pro projekty WinUI. 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í.
Požadavky
- Začněte s jednou projektovou aplikací MSIX WinUI nebo migrujte projekt tak, aby používal MSIX s jedním projektem.
- Zaregistrujte se do GitHubu, vytvořte úložiště, pokud jste tak ještě neučinili.
Krok 1: Nastavení certifikátu
Aby bylo možné nainstalovat aplikace MSIX, musí být podepsané. Pokud už certifikát máte, můžete tento krok přeskočit. Testovací certifikát můžete snadno vytvořit tak, že otevřete aplikaci v sadě Visual Studio, kliknete pravým tlačítkem na projekt WinUI a vyberete Balíček a Publikovat –>Vytvořit balíčky aplikací.
Potom vyberte Další a přejděte na stránku Vyberte metodu podepisování, a klikněte na tlačítko Vytvořit... k vytvoření nového certifikátu. Zvolte název vydavatele a ponechte pole s heslem prázdné a vytvořte certifikát.
Potom zavřete nebo zrušte dialogová okna a všimněte si, že se v projektu vytvořil nový soubor .pfx . Toto je certifikát, kterým můžete msiX podepsat.
Krok 2: Přidání certifikátu do tajných kódů Akcí
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, GitHub podporuje tajemství.
Chcete-li nahrát certifikát pro automatizované sestavení:
- Zakódujte certifikát jako řetězec Base 64: Otevřete PowerShell do adresáře, který obsahuje váš certifikát, a spusťte následující příkaz a nahraďte název souboru pfx názvem souboru vašeho certifikátu.
$pfx_cert = Get-Content 'App1_TemporaryKey.pfx' -AsByteStream
[System.Convert]::ToBase64String($pfx_cert) | Out-File 'App1_TemporaryKey_Base64.txt'
- V úložišti GitHub přejděte na nastavení a vlevo klikněte na Tajemství.
- Klikněte na Nový tajný klíč úložiště, pojmenujte ho
BASE64_ENCODED_PFXa zkopírujte nebo vložte text z textového souboru ve výstupu PowerShellu do hodnoty tajného kódu.
Krok 3: Nastavení pracovního postupu
V dalším kroku v úložišti přejděte na kartu Akce a vytvořte nový pracovní postup. Zvolte nastavit pracovní postup sami možnost místo jedné ze šablon pracovních postupů.
Zkopírujte nebo vložte následující text do souboru pracovního postupu a pak aktualizujte...
- Solution_Name pro název vašeho řešení
-
dotnet-version na
8.0.x(nebo podle toho, na kterou verzi .NET váš projekt cílí)
Poznámka:
Pokud se v kroku nahrání artefaktu (poslední krok níže) nezobrazí výstup sestavení ve složce, která obsahuje vaše řešení, nahraďte env.Solution_Namegithub.workspace (složka pracovního prostoru GitHub Actions).
# This workflow will build, sign, and package a WinUI MSIX desktop application
# built on .NET.
name: WinUI MSIX app
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
strategy:
matrix:
configuration: [Release]
platform: [x64, x86]
runs-on: windows-latest # For a list of available runner types, refer to
# https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idruns-on
env:
Solution_Name: your-solution-name # Replace with your solution name, i.e. App1.sln.
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
# Install the .NET workload
- name: Install .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.x
# Add MSBuild to the PATH: https://github.com/microsoft/setup-msbuild
- name: Setup MSBuild.exe
uses: microsoft/setup-msbuild@v2
# Restore the application to populate the obj folder with RuntimeIdentifiers
- name: Restore the application
run: msbuild $env:Solution_Name /t:Restore /p:Configuration=$env:Configuration
env:
Configuration: ${{ matrix.configuration }}
# Decode the base 64 encoded pfx and save the Signing_Certificate
- name: Decode the pfx
run: |
$pfx_cert_byte = [System.Convert]::FromBase64String("${{ secrets.BASE64_ENCODED_PFX }}")
$certificatePath = "GitHubActionsWorkflow.pfx"
[IO.File]::WriteAllBytes("$certificatePath", $pfx_cert_byte)
# Create the app package by building and packaging the project
- name: Create the app package
run: msbuild $env:Solution_Name /p:Configuration=$env:Configuration /p:Platform=$env:Platform /p:UapAppxPackageBuildMode=$env:Appx_Package_Build_Mode /p:AppxBundle=$env:Appx_Bundle /p:PackageCertificateKeyFile=GitHubActionsWorkflow.pfx /p:AppxPackageDir="$env:Appx_Package_Dir" /p:GenerateAppxPackageOnBuild=true
env:
Appx_Bundle: Never
Appx_Package_Build_Mode: SideloadOnly
Appx_Package_Dir: Packages\
Configuration: ${{ matrix.configuration }}
Platform: ${{ matrix.platform }}
# Remove the pfx
- name: Remove the pfx
run: Remove-Item -path GitHubActionsWorkflow.pfx
# Upload the MSIX package: https://github.com/marketplace/actions/upload-a-build-artifact
- name: Upload MSIX package
uses: actions/upload-artifact@v4
with:
name: MSIX Package - ${{ matrix.platform }}
path: ${{ env.Solution_Name }}\\Packages
Krok 4: Potvrďte pracovní postup a sledujte jeho spuštění.
Potvrďte soubor pracovního postupu do hlavní větve a pak přejděte na kartu Akce v úložišti GitHub a sledujte spuštění pracovního postupu. Měl by se úspěšně spustit a vytvořit výstupy, které obsahují vaši vytvořenou aplikaci MSIX.
Sestavení z příkazového řádku
Pokud chcete vytvořit řešení pomocí příkazového řádku nebo pomocí jakéhokoli jiného systému CI, spusťte nástroj MSBuild s těmito argumenty. Tato GenerateAppxPackageOnBuild vlastnost způsobí vygenerování balíčku MSIX.
/p:AppxPackageDir="Packages"
/p:UapAppxPackageBuildMode=SideloadOnly
/p:AppxBundle=Never
/p:GenerateAppxPackageOnBuild=true
Krok 1: Nastavení pracovního postupu
V úložišti GitHub přejděte na kartu Akce a vytvořte nový pracovní postup. Zvolte nastavit pracovní postup sami možnost místo jedné ze šablon pracovních postupů.
Zkopírujte nebo vložte následující text do souboru pracovního postupu a pak aktualizujte...
- Solution_Name pro název vašeho řešení
-
dotnet-version na
8.0.x(nebo podle toho, na kterou verzi .NET váš projekt cílí)
Poznámka:
Pokud se v kroku nahrání artefaktu (poslední krok níže) nezobrazí výstup sestavení ve složce, která obsahuje vaše řešení, nahraďte env.Solution_Namegithub.workspace (složka pracovního prostoru GitHub Actions).
# This workflow will build and publish a WinUI unpackaged desktop application
# built on .NET.
name: WinUI unpackaged app
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
strategy:
matrix:
configuration: [Release]
platform: [x64, x86]
runs-on: windows-latest # For a list of available runner types, refer to
# https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idruns-on
env:
Solution_Name: your-solution-name # Replace with your solution name, i.e. App1.sln.
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
# Install the .NET workload
- name: Install .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.x
# Add MSBuild to the PATH: https://github.com/microsoft/setup-msbuild
- name: Setup MSBuild.exe
uses: microsoft/setup-msbuild@v2
# Restore the application to populate the obj folder with RuntimeIdentifiers
- name: Restore the application
run: msbuild $env:Solution_Name /t:Restore /p:Configuration=$env:Configuration
env:
Configuration: ${{ matrix.configuration }}
# Create the app by building and publishing the project
- name: Create the app
run: msbuild $env:Solution_Name /t:Publish /p:Configuration=$env:Configuration /p:Platform=$env:Platform
env:
Configuration: ${{ matrix.configuration }}
Platform: ${{ matrix.platform }}
# Upload the app
- name: Upload app
uses: actions/upload-artifact@v4
with:
name: Upload app - ${{ matrix.platform }}
path: ${{ env.Solution_Name }}\\bin
Krok 2: Potvrďte pracovní postup a sledujte jeho spuštění.
Potvrďte soubor pracovního postupu do hlavní větve a pak přejděte na kartu Akce v úložišti GitHub a sledujte spuštění pracovního postupu. Měl by se úspěšně spustit a vytvořit výstupy, které obsahují sestavenou aplikaci.
Sestavení z příkazového řádku
Pokud chcete řešení sestavit pomocí příkazového řádku nebo pomocí jiného systému CI, spusťte nástroj MSBuild s argumentem /t:Publish .
Azure Pipelines
Pokud váš tým používá Azure DevOps, můžete vytvářet aplikace WinUI 3 pomocí Azure Pipelines. Následující kanál YAML sestaví zabalenou aplikaci MSIX WinUI v agentu Windows:
trigger:
- main
pool:
vmImage: 'windows-latest'
variables:
solution: '**/*.sln'
buildPlatform: 'x64'
buildConfiguration: 'Release'
steps:
- task: UseDotNet@2
displayName: 'Install .NET SDK'
inputs:
packageType: 'sdk'
version: '8.0.x'
- task: NuGetToolInstaller@1
- task: NuGetCommand@2
inputs:
restoreSolution: '$(solution)'
- task: VSBuild@1
displayName: 'Build MSIX package'
inputs:
solution: '$(solution)'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
msbuildArgs: |
/p:AppxBundlePlatforms="$(buildPlatform)"
/p:AppxPackageDir="$(Build.ArtifactStagingDirectory)\AppxPackages\\"
/p:AppxBundle=Never
/p:UapAppxPackageBuildMode=SideloadOnly
/p:GenerateAppInstallerFile=false
- task: PublishBuildArtifacts@1
displayName: 'Publish MSIX artifacts'
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)\AppxPackages'
ArtifactName: 'msix-package'
Poznámka:
Pro nesbalená sestavení odeberte argumenty nástroje MSBuild /p:Appx* a místo VSBuild použijte dotnet publish. Podrobnosti najdete v části příkazového řádku výše.
Pro podepisování balíčků MSIX v kanálu uložte certifikát do Azure Pipelines zabezpečených souborů a použijte úlohu DownloadSecureFile pro přístup k němu během sestavení.
Important
Nikdy neukládejte podpisové certifikáty ani jejich hesla ve správě zdrojového kódu. Pro heslo certifikátu použijte tajné proměnné kanálu a službu Azure Pipelines Secure Files pro samotný certifikát.
Windows developer