你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 GitHub Actions 部署到应用服务

开始使用 GitHub Actions 以自动执行工作流,并将其从 GitHub 部署到 Azure 应用服务

先决条件

创建应用时设置 GitHub Actions 部署

GitHub Actions 部署已集成到默认应用创建向导。 只需在“部署”选项卡中将“持续部署”设置为“启用”,并配置所需的组织、存储库和分支。

A screenshot showing how to enable GitHub Actions deployment in the App Service create wizard.

启用持续部署后,应用创建向导会根据基本身份验证选择自动选取身份验证方法,并相应地配置应用和 GitHub 存储库:

基本身份验证选择 身份验证方法
禁用 用户分配的标识 (OpenID Connect)
启用 基本身份验证

注意

如果你在创建应用时收到错误,指出你的 Azure 帐户没有某些权限,则可能没有创建和配置用户分配的标识所需的权限。 有关替代方法,请参阅从部署中心设置 GitHub Actions 部署

从部署中心设置 GitHub Actions 部署

对于现有应用,可以使用应用服务部署中心快速开始使用 GitHub Actions。 此“交钥匙”方法将自动生成基于应用程序堆栈的 GitHub Actions 工作流文件,并将它提交到 GitHub 存储库。

使用部署中心还可以通过“用户分配的标识”选项轻松配置更安全的 OpenID Connect 身份验证。

如果你的 Azure 帐户具有所需的权限,可以选择创建用户分配的标识。 否则,可以在“标识”下拉列表中选择现有的用户分配的托管标识。 可以与 Azure 管理员协作,使用网站参与者角色创建用户分配的托管标识。

有关详细信息,请参阅持续部署到 Azure 应用服务

手动设置 GitHub Actions 工作流

也可以在不使用部署中心的情况下部署工作流。

  1. 生成部署凭据
  2. 配置 GitHub 机密
  3. 将工作流文件添加到 GitHub 存储库

1.生成部署凭据

建议使用用户定义的托管标识向 Azure App Services for GitHub Actions 进行身份验证,为此,最简单的方法是直接在门户中配置 GitHub Actions 部署并选择用户分配的托管标识

注意

使用用户分配的托管标识进行身份验证目前为预览版。

或者,可以使用服务主体、OpenID Connect 或发布配置文件进行身份验证。

注意

发布配置文件要求启用基本身份验证

发布配置文件是应用级凭据。 将发布配置文件设置为 GitHub 机密。

  1. 在 Azure 门户中转到应用服务。

  2. 在“概述”页上,选择“获取发布配置文件” 。

  3. 保存下载的文件。 你将使用该文件的内容来创建 GitHub 机密。

注意

从 2020 年 10 月起,Linux Web 应用在下载发布配置文件之前,需要将应用设置 WEBSITE_WEBDEPLOY_USE_SCM 设置为 true。 未来将删除此要求。

2.配置 GitHub 机密

GitHub 中,浏览你的存储库。 选择“设置”>“安全性”>“机密和变量”>“操作”>“新建存储库机密”。

若要使用应用级凭据,请将下载的发布配置文件的内容粘贴到机密的值字段中。 将机密命名为 AZURE_WEBAPP_PUBLISH_PROFILE

以后配置 GitHub 工作流文件时,请在部署 Azure Web 应用操作中使用 AZURE_WEBAPP_PUBLISH_PROFILE。 例如:

- uses: azure/webapps-deploy@v2
  with:
    publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}

3.将工作流文件添加到 GitHub 存储库

工作流是由 GitHub 存储库中 /.github/workflows/ 路径中的 YAML (.yml) 文件定义的。 此定义包含组成工作流的各种步骤和参数。

工作流文件至少会执行以下不同的步骤:

  1. 使用创建的 GitHub 机密对应用服务进行身份验证。
  2. 构建 Web 应用。
  3. 部署 Web 应用。

若要将代码部署到应用服务应用,请使用 azure/webapps-deploy@v3 操作。 该操作需要 app-name 中的 Web 应用的名称,以及要在 package 中部署的 *.zip、*.war、*.jar 或文件夹的路径(具体取决于语言堆栈)。 有关 azure/webapps-deploy@v3 操作的可能输入的完整列表,请参阅 action.yml 定义。

以下示例显示了以不同受支持的语言生成 Web 应用的工作流部分。

publish-profile 输入应引用之前创建AZURE_WEBAPP_PUBLISH_PROFILE GitHub 机密。

name: .NET Core CI

on: [push]

env:
  AZURE_WEBAPP_NAME: my-app-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: '6.0.x'           # set this to the dot net version to use

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      # Checkout the repo
      - uses: actions/checkout@main
      
      # Setup .NET Core SDK
      - name: Setup .NET Core
        uses: actions/setup-dotnet@v3
        with:
          dotnet-version: ${{ env.DOTNET_VERSION }} 
      
      # Run dotnet build and publish
      - name: dotnet build and publish
        run: |
          dotnet restore
          dotnet build --configuration Release
          dotnet publish -c Release --property:PublishDir='${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp' 
          
      # Deploy to Azure Web apps
      - name: 'Run Azure webapp deploy action using publish profile credentials'
        uses: azure/webapps-deploy@v3
        with: 
          app-name: ${{ env.AZURE_WEBAPP_NAME }} # Replace with your app name
          publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE  }} # Define secret variable in repository settings as per action documentation
          package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp'

后续步骤

查看有关 Azure GitHub Actions 和工作流的参考: