使用 GitHub Actions 将应用更新发布到 Microsoft Store

注释

目前仅免费产品支持通过 GitHub Actions 执行应用更新操作。 未来版本将支持付费产品。

通过 GitHub Actions,可为 Microsoft 应用商店应用实现可靠的 CI/CD 管道。 通过直接从代码存储库自动执行生成、测试和部署步骤,可确保对每个更改(无论是 bug 修复、功能更新还是元数据更改)进行验证并安全地发布到Microsoft存储。

若要了解如何为应用更新过程设置先决条件,请查看以下视频:

先决条件

  1. 合作伙伴中心注册为 Windows 应用开发人员。

  2. 拥有与合作伙伴中心帐户关联的租户。 可以通过在 合作伙伴中心关联现有Microsoft Entra ID 或在 合作伙伴中心创建新的Microsoft Entra ID 来实现此目的。

  3. 在 Microsoft Entra ID 中注册应用程序

  4. 接下来,在合作伙伴中心的“帐户设置”部分的“用户管理”页下的“Microsoft Entra 应用程序”选项卡中,添加表示将用于访问合作伙伴中心帐户提交的应用或服务的Microsoft Entra ID 应用程序。 确保为此应用程序分配“管理者”角色。

  5. 要更新的应用必须已发布并位于 Microsoft Store 中。

  6. 所需的 ID 和机密:

    • 租户 ID (这是Microsoft Entra 租户的唯一标识符。转到 https://entra.microsoft.com/。导航到 Azure Active Directory > 概述。复制“租户 ID”值。
    • 客户端 ID (这是你创建的应用注册的应用程序 ID。在 Entra 管理中心,转到 Azure Active Directory > 应用注册。选择已注册的应用。复制“应用程序 ID”。)用于 API 访问。 在 Entra 管理中心,转到 Azure Active Directory > 应用注册。 选择已注册的应用。 复制“应用程序 ID”。)
    • 客户端密码(这是为应用注册生成的类似密码的值,用于安全身份验证。在 Entra 管理中心,转到 Azure Active Directory > 应用注册。选择已注册的应用,转到“证书和机密”。在“客户端机密”下,创建新的机密(如果尚未创建)。立即复制值,因为它不会再次显示)
    • 卖家 ID (这是Microsoft合作伙伴中心的唯一发布者/卖家标识符。登录到 合作伙伴中心。转到帐户设置 > 开发人员设置或标识符。查找“发布者 ID”或“卖家 ID”。

    这些密钥将用作 GitHub 存储库中的机密。

设置 GitHub Actions 以更新 Microsoft Store 上的应用

如果项目已有 GitHub 存储库,可以直接将其用于自动化Microsoft应用商店应用更新。

在 GitHub 存储库中,转到 设置>机密和变量>操作>新存储库机密

显示如何将机密添加到存储库的屏幕截图。

添加以下机密:

  • AZURE_AD_APPLICATION_CLIENT_ID
  • AZURE_AD_APPLICATION_SECRET
  • AZURE_AD_TENANT_ID
  • SELLER_ID

可以使用 GitHub Actions 为两种类型的应用、 MSIX 和 MSI/EXE 自动执行应用更新。 选择要更新的应用类型:

添加 GitHub Action 工作流 以调用 Microsoft GitHub Action(microsoft-store-apppublisher),以便发布包和应用元数据更新到商店。

若要了解如何使用 GitHub Actions 自动执行包和元数据更新,请查看以下视频:

包更新方面

在 .github/workflows/下,使用提供的工作流代码片段创建AppPackageAutoUpdate.yml:

name: AppPackageAutoUpdate 
 
on: 
  push: 
    paths: 
      - 'release/package.msix' 
 
jobs: 
  build: 
    runs-on: windows-latest 
 
    steps: 
      - name: Checkout repository 
        uses: actions/checkout@v4 
 
      - name: Configure Microsoft Store CLI 
        uses: microsoft/microsoft-store-apppublisher@v1.1 
 
      - name: Reconfigure store credentials 
        run: msstore reconfigure ` 
              --tenantId ${{ secrets.AZURE_AD_TENANT_ID }} ` 
              --sellerId ${{ secrets.SELLER_ID }} ` 
              --clientId ${{ secrets.AZURE_AD_APPLICATION_CLIENT_ID }} ` 
              --clientSecret ${{ secrets.AZURE_AD_APPLICATION_SECRET }} 
 
      - name: Publish App package 
        run: msstore publish '${{ github.workspace }}/release/package.msix' -id <Store product Id>

在发布文件夹中将 package.msix 更新为 CI/CD 流的一部分时,将自动触发AppPackageAutoUpdate.yml工作流。

对于元数据更新

首次发布元数据更新之前,请从合作伙伴中心获取应用提交的基本元数据 JSON。 这可确保从应用的正确结构开始。 因此,使用提供的代码片段在 .github/workflows/GetBaseMetadata.yml 下创建 GitHub Actions 工作流:

name: GetBaseMetadata 
 
on: 
  workflow_dispatch: 
 
jobs: 
  build: 
    runs-on: windows-latest 
 
    steps: 
    - uses: actions/checkout@v3 
 
    - uses: microsoft/microsoft-store-apppublisher@v1.1 
 
    - name: Configure MSStore CLI 
      run: | 
        msstore reconfigure ` 
          --tenantId ${{ secrets.AZURE_AD_TENANT_ID }} ` 
          --sellerId ${{ secrets.SELLER_ID }} ` 
          --clientId ${{ secrets.AZURE_AD_APPLICATION_CLIENT_ID }} ` 
          --clientSecret ${{ secrets.AZURE_AD_APPLICATION_SECRET }} 
 
    - name: Get base metadata  
      shell: pwsh 
      run: | 
        msstore submission get <Store product Id>

从 GitHub 存储库中的“作”选项卡运行此工作流。 选择相关的工作流,然后单击“运行工作流”。

显示用于获取 MSIX 应用基本元数据的工作流运行过程的屏幕截图。

完成后,工作流将在生成日志中获取应用的元数据。 复制该文件并在元数据文件夹中创建 metadata.json 文件。

现在,在 .github/workflows/下,使用提供的工作流代码片段创建AppMetadataAutoUpdate.yml:

name: AppMetadataAutoUpdate 
 
on: 
  push: 
    paths: 
      - 'metadata/metadata.json' 
 
jobs: 
  build: 
    runs-on: windows-latest 
 
    steps: 
      - name: Checkout repository 
        uses: actions/checkout@v4 
 
      - name: Configure Microsoft Store CLI 
        uses: microsoft/microsoft-store-apppublisher@v1.1 
 
      - name: Reconfigure store credentials 
        run: msstore reconfigure ` 
              --tenantId ${{ secrets.AZURE_AD_TENANT_ID }} ` 
              --sellerId ${{ secrets.SELLER_ID }} ` 
              --clientId ${{ secrets.AZURE_AD_APPLICATION_CLIENT_ID }} ` 
              --clientSecret ${{ secrets.AZURE_AD_APPLICATION_SECRET }} 
 
      - name: Update metadata 
        run: | 
          $metadata = Get-Content -Raw "${{ github.workspace }}/metadata/metadata.json" 
          msstore submission updateMetadata <Store product Id> $metadata
      - name: Publish to Store 
        run: msstore submission publish <Store product Id>

当 metadata.json 作为元数据文件夹中 CI/CD 流的一部分进行更新时,它将自动触发AppMetadataAutoUpdate.yml工作流。

上述工作流程将在后台执行以下任务:

  • 调用 GitHub Action(microsoft-store-apppublisher)
  • 使用配置的机密(租户 ID、客户端 ID、客户端密码、卖家 ID)对Microsoft应用商店合作伙伴中心帐户进行身份验证。
  • 使用 Microsoft 应用商店开发人员 CLI (msstore) 获取基本元数据,并将更新的包或元数据发布到 Microsoft 应用商店。

有关命令的详细信息,请参阅Microsoft应用商店开发人员 CLI (MSIX)。

GitHub Actions 工作流成功完成后,请检查 Microsoft Store,以确认您的更改是否已推出。 合作伙伴中心中的认证过程完成后,将显示更新。

我们相信本文档有助于显著提高Microsoft应用商店更新过程的效率和可靠性。 遵循这些最佳做法,可以简化应用发布并确保一致的高质量发布体验。