Skip to main content
We publish frequent updates to our documentation, and translation of this page may still be in progress. For the most current information, please visit the English documentation.

将 .NET 部署到 Azure App Service

作为持续部署 (CD) 工作流程的一部分,您可以将 .NET 项目部署到 Azure App Service。

注意:GitHub Enterprise Server 目前不支持 GitHub 托管的运行器。 可以在 GitHub public roadmap 上查看有关未来支持计划的更多信息。

简介

本指南说明如何使用 GitHub Actions 构建 .NET 项目并将其部署到 Azure 应用服务

先决条件

在创建 GitHub Actions 工作流程之前,首先需要完成以下设置步骤:

  1. 创建 Azure 应用服务计划。

    例如,可以使用 Azure CLI 创建新的应用服务计划:

    Shell
    az appservice plan create \
       --resource-group MY_RESOURCE_GROUP \
       --name MY_APP_SERVICE_PLAN \
       --is-linux

    在上述命令中,将 MY_RESOURCE_GROUP 替换为你原有的 Azure 资源组,将 MY_APP_SERVICE_PLAN 替换为应用服务计划的新名称。

    有关使用 Azure CLI 的详细信息,请参阅 Azure 文档:

  2. 创建 Web 应用。

    例如,可以使用 Azure CLI 创建具有 .NET 运行时的 Azure App Service Web 应用:

    Shell
    az webapp create \
        --name MY_WEBAPP_NAME \
        --plan MY_APP_SERVICE_PLAN \
        --resource-group MY_RESOURCE_GROUP \
        --runtime "DOTNET|5.0"

    在上面的命令中,将参数替换为你自己的值,其中 MY_WEBAPP_NAME 是 Web 应用的新名称。

  3. 配置 Azure 发布配置文件并创建 AZURE_WEBAPP_PUBLISH_PROFILE 机密。

    使用发布配置文件生成 Azure 部署凭据。 有关详细信息,请参阅 Azure 文档中的“生成部署凭据”。

    在 GitHub 存储库中,创建一个名为 AZURE_WEBAPP_PUBLISH_PROFILE 的机密,其中包含发布配置文件的内容。 要详细了解如何创建机密,请参阅“加密的机密”。

  4. Optionally, configure a deployment environment. 环境用于描述常规部署目标,例如 productionstagingdevelopment。 当 GitHub Actions 工作流部署到某个环境时,该环境将显示在存储库的主页上。 你可以使用环境来要求批准才能继续作业,限制哪些分支可以触发工作流,或限制对机密的访问。 有关创建环境的详细信息,请参阅“使用环境进行部署”。

创建工作流程

完成先决条件后,可以继续创建工作流程。

以下示例工作流演示如何在推送到 main 分支时构建 .NET 项目并将其部署到 Azure 应用服务。

确保在工作流 env 中将 AZURE_WEBAPP_NAME 密钥设置为创建的 Web 应用的名称。 如果项目的路径不是存储库根路径,请更改 AZURE_WEBAPP_PACKAGE_PATH。 如果使用 5 以外的 .NET 版本,请更改 DOTNET_VERSION

如果配置了部署环境,请将 environment 的值更改为环境的名称。 如果未配置环境 ,请删除 environment 密钥。

YAML
# <a name="this-workflow-uses-actions-that-are-not-certified-by-github"></a>此工作流使用未经 GitHub 认证的操作。
# <a name="they-are-provided-by-a-third-party-and-are-governed-by"></a>它们由第三方提供,并受
# <a name="separate-terms-of-service-privacy-policy-and-support"></a>单独的服务条款、隐私政策和支持
# <a name="documentation"></a>文档。

# <a name="github-recommends-pinning-actions-to-a-commit-sha"></a>GitHub 建议将操作固定到提交 SHA。
# <a name="to-get-a-newer-version-you-will-need-to-update-the-sha"></a>若要获取较新版本,需要更新 SHA。
# <a name="you-can-also-reference-a-tag-or-branch-but-the-action-may-change-without-warning"></a>还可以引用标记或分支,但该操作可能会更改而不发出警告。

name: Build and deploy ASP.Net Core app to an Azure Web App

env:
  AZURE_WEBAPP_NAME: MY_WEBAPP_NAME   # set this to your application's name
  AZURE_WEBAPP_PACKAGE_PATH: '.'      # set this to the path to your web app project, defaults to the repository root
  DOTNET_VERSION: '5'                 # set this to the .NET Core version to use

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2

      - name: Set up .NET Core
        uses: actions/setup-dotnet@v1
        with:
          dotnet-version: ${{ env.DOTNET_VERSION }}

      - name: Set up dependency caching for faster builds
        uses: actions/cache@v2
        with:
          path: ~/.nuget/packages
          key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
          restore-keys: |
            ${{ runner.os }}-nuget-

      - name: Build with dotnet
        run: dotnet build --configuration Release

      - name: dotnet publish
        run: dotnet publish -c Release -o ${{env.DOTNET_ROOT}}/myapp

      - name: Upload artifact for deployment job
        uses: actions/upload-artifact@v2
        with:
          name: .net-app
          path: ${{env.DOTNET_ROOT}}/myapp

  deploy:
    runs-on: ubuntu-latest
    needs: build
    environment:
      name: 'production'
      url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}

    steps:
      - name: Download artifact from build job
        uses: actions/download-artifact@v2
        with:
          name: .net-app

      - name: Deploy to Azure Web App
        id: deploy-to-webapp
        uses: azure/webapps-deploy@0b651ed7546ecfc75024011f76944cb9b381ef1e
        with:
          app-name: ${{ env.AZURE_WEBAPP_NAME }}
          publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
          package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}

其他资源

以下资源也可能有用: