如何部署到 Azure App Service

为了帮助您开始使用 GitHub Actions 进行自动化部署,我创建了三个实践实验:

  • 部署到 Azure App Service

  • 部署到 AWS ECS

  • 部署到 GKE

所有的实践实验都假设您已经在指定的云平台上设置好了帐户。如果您使用的是单一云策略,您可以直接跳到与您相关的实验步骤,跳过其他的。

有关实践实验的详细步骤说明,请访问 GitHub 上的 链接。建议您按照该页面上的步骤操作,因为它提供了可以方便复制和粘贴的链接。在这里,我将解释背景并提供逐步指南,重点是如何部署应用。

部署 Azure 资源

Azure 资源的部署在 setup-azure.sh 脚本中进行。该脚本创建了一个资源组、一个应用服务计划和一个应用服务。您可以很容易地在工作流中执行此脚本。部署后,我们从 Web 应用中获取发布配置文件并将其存储在 GitHub 中的一个密钥中。您可以通过 Azure 门户或 Azure CLI 获取发布配置文件:

$ az webapp deployment list-publishing-profiles \
--resource-group $rgname \
--name $appName \
--xml

使用 GitHub Actions 部署应用

该工作流由两个作业组成:构建和部署。构建作业配置运行器以使用正确的 NodeJS 和 .NET 版本并构建应用程序。

以下任务使用 dotnet publish 将网站发布到名为 publish 的文件夹:

- name: Build and publish with dotnet
  working-directory: ch9_release/src/Tailwind.Traders.Web
  run: |
    dotnet build --configuration Release
    dotnet publish -c Release -o publish

下一步将构建的工件上传到 GitHub,以便在后续作业中使用。这使得您可以将相同的包发布到多个环境中:

- name: Upload Artifact
  uses: actions/upload-artifact@v2
  with:
    name: website
    path: ch9_release/src/Tailwind.Traders.Web/publish

此外,您可以在工作流完成后查看和检查工件(见图 9.4):

image 2024 12 27 13 37 10 174
Figure 1. 图 9.4 – 工作流工件

部署作业依赖于构建作业,并将应用程序部署到生产环境。在环境中,您需要设置密钥并添加必要的审查员:

Deploy:
  runs-on: ubuntu-latest
  environment: prod
  needs: Build

该工作流下载名为 website 的工件到一个名为 website 的文件夹:

- uses: actions/download-artifact@v2
  with:
    name: website
    path: website

接着,它使用 azure/webapps-deploy 操作并通过发布配置文件部署网站:

- name: Run Azure webapp deploy action using publish profile credentials
  uses: azure/webapps-deploy@v2
  with:
    app-name: ${{ env.appName }}
    slot-name: Production
    publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE }}
    package: website

最后一步只是一个如何验证部署的示例。您当然需要使用 curl 请求一个指向数据库的网站的 URL:

u=https://${{ env.appName }}.azurewebsites.net/
status=`curl --silent --head $u | head -1 | cut -f 2 -d' '`
if [ "$status" != "200" ]
then
  echo "Wrong HTTP Status. Actual: '$status'"
  exit 1
fi

如果您完成了实践实验中的逐步指南,您将拥有一个可以添加其他环境并部署到不同 App Service 部署插槽的测试环境(有关更多信息,请访问 Azure App Service 部署插槽文档)。