快速入门:创建用于发布应用的GitHub工作流

本快速入门介绍如何创建GitHub工作流,以便从源代码发布 .NET 应用。 自动将 .NET 应用从GitHub发布到目标称为持续部署 (CD) 。 在本快速入门中,有许多可能的目标可以发布应用程序。

先决条件

  • GitHub帐户
  • .NET 源代码存储库。
  • 具有活动订阅的 Azure 帐户。 免费创建帐户
  • ASP.NET Core Web 应用。
  • Azure 应用服务资源。

添加发布配置文件

若要将应用发布到 Azure,请打开应用程序的App 服务实例的Azure 门户。 在资源 概述中,选择 “获取发布配置文件 ”并保存 *。本地 PublishSetting 文件。

Azure Portal, App Service resource: Get publish profile

警告

发布配置文件包含敏感信息,例如用于访问Azure 应用服务资源的凭据。 应始终非常小心地处理此信息。

在GitHub存储库中,导航到设置,然后从左侧导航菜单中选择“机密”。 选择 “新建存储库机密”以添加新机密。

GitHub / Settings / Secret: Add new repository secret

输入 AZURE_PUBLISH_PROFILE“名称”,并将发布配置文件中的 XML 内容粘贴到 “值 ”文本区域中。 选择“添加机密”。 有关详细信息,请参阅 加密机密

创建工作流文件

在GitHub存储库中,将新的 YAML 文件添加到 .github/workflows 目录。 选择一个有意义的文件名,这将清楚地指示工作流要执行的操作。 有关详细信息,请参阅 工作流文件

重要

GitHub要求将工作流组合文件放置在 .github/workflows 目录中。

Workflow files typically define a composition of one or more GitHub Action via the jobs.<job_id>/steps[*]. 有关详细信息,请参阅GitHub Actions的工作流语法

创建名为 publish-app.yml 的新文件,将以下 YML 内容复制并粘贴到其中:

name: publish

on:
  push:
    branches: [ production ]

env:
  AZURE_WEBAPP_NAME: DotNetWeb
  AZURE_WEBAPP_PACKAGE_PATH: '.' # Set this to the path to your web app project, defaults to the repository root:
  DOTNET_VERSION: '5.0.301' # The .NET SDK version to use

jobs:
  publish:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Setup .NET Core
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: ${{ env.DOTNET_VERSION }}

    - name: Install dependencies
      run: dotnet restore
      
    - name: Build
      run: |
        cd DotNet.WebApp
        dotnet build --configuration Release --no-restore
        dotnet publish -c Release -o ../dotnet-webapp -r linux-x64 --self-contained true /p:UseAppHost=true
    - name: Test
      run: |
        cd DotNet.WebApp.Tests
        dotnet test --no-restore --verbosity normal
      
    - uses: azure/webapps-deploy@v2
      name: Deploy
      with:
        app-name: ${{ env.AZURE_WEBAPP_NAME }}
        publish-profile: ${{ secrets.AZURE_PUBLISH_PROFILE }}
        package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/dotnet-webapp'

在前面的工作流组合中:

  • 定义 name: publish 名称“发布”将显示在工作流状态锁屏提醒中。

    name: publish
    
  • 节点 on 表示触发工作流的事件:

    on:
      push:
        branches: [ production ]
    
    • 在分支上production发生时push触发。
  • 节点 env 定义命名环境变量 (env var) 。

    env:
      AZURE_WEBAPP_NAME: DotNetWeb
      AZURE_WEBAPP_PACKAGE_PATH: '.' # Set this to the path to your web app project, defaults to the repository root:
      DOTNET_VERSION: '5.0.301' # The .NET SDK version to use
    
    • 为环境变量 AZURE_WEBAPP_NAME 赋值 DotNetWeb
    • 为环境变量 AZURE_WEBAPP_PACKAGE_PATH 赋值 '.'
    • 为环境变量 DOTNET_VERSION 赋值 '5.0.301'。 稍后将引用环境变量以指定dotnet-versionactions/setup-dotnet@v1 GitHub操作。
  • 节点 jobs 会生成工作流要执行的步骤。

    jobs:
      publish:
    
        runs-on: ubuntu-latest
    
        steps:
        - uses: actions/checkout@v2
        - name: Setup .NET Core
          uses: actions/setup-dotnet@v1
          with:
            dotnet-version: ${{ env.DOTNET_VERSION }}
    
        - name: Install dependencies
          run: dotnet restore
          
        - name: Build
          run: |
            cd DotNet.WebApp
            dotnet build --configuration Release --no-restore
            dotnet publish -c Release -o ../dotnet-webapp -r linux-x64 --self-contained true /p:UseAppHost=true
        - name: Test
          run: |
            cd DotNet.WebApp.Tests
            dotnet test --no-restore --verbosity normal
          
        - uses: azure/webapps-deploy@v2
          name: Deploy
          with:
            app-name: ${{ env.AZURE_WEBAPP_NAME }}
            publish-profile: ${{ secrets.AZURE_PUBLISH_PROFILE }}
            package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/dotnet-webapp'
    
    • 有一个作业,该 publish 作业将在最新版本的 Ubuntu 上运行。
    • actions/setup-dotnet@v1 GitHub操作用于使用环境变量中的DOTNET_VERSION指定版本设置 .NET SDK。
    • 调用 dotnet restore 该命令。
    • 调用 dotnet build 该命令。
    • 调用 dotnet publish 该命令。
    • 调用 dotnet test 该命令。
    • azure/webapps-deploy@v2 GitHub操作使用给定publish-profilepackage.
      • publish-profileAZURE_PUBLISH_PROFILE存储库机密分配该密钥。

创建工作流状态锁屏提醒

GitHub存储库通常具有存储库目录根目录的 README.md 文件。 同样,最好报告各种工作流的最新状态。 所有工作流都可以生成一个状态锁屏提醒,该锁屏提醒在 README.md 文件中具有视觉吸引力。 若要添加工作流状态锁屏提醒,请执行以下操作:

  1. 从GitHub存储库中选择“操作”导航选项。

  2. 所有存储库工作流都显示在左侧,选择所需的工作流和省略号 (...) 按钮。

    • 省略号 (...) 按钮展开所选工作流的菜单选项。
  3. 选择“ 创建状态锁屏提醒 ”菜单选项。

    GitHub: Create status badge

  4. 选择 “复制状态徽章 Markdown ”按钮。

    GitHub: Copy status badge Markdown

  5. 将 Markdown 粘贴到 README.md 文件中,保存文件,提交并推送更改。

有关详细信息,请参阅 添加工作流状态锁屏提醒

发布工作流状态徽章示例

通过 失败 无状态
GitHub: publish passing badge GitHub: publish failing badge GitHub: publish no-status badge

另请参阅

后续步骤