你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
可以使用 GitHub Actions 生成自动化软件开发工作流。 可以使用 Azure Web 部署作 自动执行工作流并将自定义容器部署到 Azure 应用服务。
工作流是由存储库中 /.github/workflows/ 路径中的 YAML (.yml) 文件定义的。 此定义包含工作流中的各种步骤和参数。
对于应用服务容器工作流,该文件有三个部分:
| 部分 | 任务 |
|---|---|
| 身份验证 | 1. 检索服务主体或发布配置文件。 2. 创建 GitHub 机密。 |
| 生成 | 1. 创建环境。 2. 生成容器映像。 |
| 部署 | 1. 部署容器映像。 |
Prerequisites
- 具有活动订阅的 Azure 帐户。 免费创建帐户。
- 一个 GitHub 帐户。 如果没有该帐户,请注册免费版。 你需要将代码存放在 GitHub 仓库中,然后才能将其部署到 Azure 应用服务上。
- 一个有效的容器注册表和用于容器的 Azure 应用服务应用。 本示例使用 Azure 容器注册表。 确保完成对容器的 Azure 应用服务的完整部署。 与常规 Web 应用不同,用于容器的 Web 应用没有默认登录页。 发布容器以获得一个可正常工作的示例。
- 完成这些任务: 了解如何使用 Docker 创建容器化 Node.js 应用程序,将容器映像推送到注册表,然后将映像部署到 Azure 应用服务。
生成部署凭据
建议使用 OpenID Connect 通过 Azure 应用服务进行 GitHub Actions 身份验证。 还可以使用服务主体或发布配置文件进行验证。
若要使用 Azure 进行身份验证,请将发布配置文件凭据或服务主体另存为 GitHub 机密。 您可以访问工作流中的机密信息。
发布配置文件是应用级凭据。 将发布配置文件设置为 GitHub 机密。
转到 Azure 门户中的应用服务。
在“ 概述 ”窗格中,选择“ 获取发布配置文件”。
注意
从 2020 年 10 月开始,用户必须先将 Linux Web 应用的应用设置
WEBSITE_WEBDEPLOY_USE_SCM设置为true,然后才能下载文件。 若要了解如何配置常见的 Web 应用设置,请转到 Azure 门户中配置应用服务应用。保存下载的文件。 使用文件中的内容创建 GitHub 密钥。
配置 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 }}
为注册表配置 GitHub 机密
定义要用于 Docker 登录操作的机密。 本文中的示例对容器注册表使用 Azure 容器注册表。
在 Azure 门户或 Docker 中转到你的容器,然后复制用户名和密码。 可在 Azure 门户中的“设置”“访问密钥”下找到注册表的 Azure 容器注册表用户名和密码>。
为名为
REGISTRY_USERNAME的注册表用户名定义新机密。为名为
REGISTRY_PASSWORD的注册表密码定义新机密。
生成容器映像
以下示例演示生成 Node.js Docker 映像的工作流的一部分。 使用 Docker 登录 登录到专用容器注册表。 此示例使用 Azure 容器注册表,但相同的操作也适用于其他注册表。
name: Linux Container Node Workflow
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: azure/docker-login@v1
with:
login-server: mycontainer.azurecr.io
username: ${{ secrets.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_PASSWORD }}
- run: |
docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
docker push mycontainer.azurecr.io/myapp:${{ github.sha }}
还可以使用 Docker 登录 同时登录到多个容器注册表。 此示例包括两个新的 GitHub 机密,用于向 docker.io 进行身份验证。 此示例假设注册表的根级别处有一个 Dockerfile。
name: Linux Container Node Workflow
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: azure/docker-login@v1
with:
login-server: mycontainer.azurecr.io
username: ${{ secrets.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_PASSWORD }}
- uses: azure/docker-login@v1
with:
login-server: index.docker.io
username: ${{ secrets.DOCKERIO_USERNAME }}
password: ${{ secrets.DOCKERIO_PASSWORD }}
- run: |
docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
docker push mycontainer.azurecr.io/myapp:${{ github.sha }}
以下示例显示生成 Windows Docker 映像的工作流的一部分。 使用 Docker 登录 登录到专用容器注册表。 此示例使用 Azure 容器注册表,但相同的操作也适用于其他注册表。
name: Windows Container Workflow
on: [push]
jobs:
build:
runs-on: windows-latest
steps:
- uses: actions/checkout@v2
- uses: azure/docker-login@v1
with:
login-server: mycontainer.azurecr.io
username: ${{ secrets.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_PASSWORD }}
- run: |
docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
docker push mycontainer.azurecr.io/myapp:${{ github.sha }}
还可以使用 Docker 登录 同时登录到多个容器注册表。 此示例包括两个新的 GitHub 机密,用于向 docker.io 进行身份验证。 此示例假设注册表的根级别处有一个 Dockerfile。
name: Windows Container Workflow
on: [push]
jobs:
build:
runs-on: windows-latest
steps:
- uses: actions/checkout@v2
- uses: azure/docker-login@v1
with:
login-server: mycontainer.azurecr.io
username: ${{ secrets.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_PASSWORD }}
- uses: azure/docker-login@v1
with:
login-server: index.docker.io
username: ${{ secrets.DOCKERIO_USERNAME }}
password: ${{ secrets.DOCKERIO_PASSWORD }}
- run: |
docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
docker push mycontainer.azurecr.io/myapp:${{ github.sha }}
部署到应用服务容器
若要将映像部署到应用服务中的自定义容器,请使用 azure/webapps-deploy@v2 操作。 此操作有七个参数:
| Parameter | 解释 |
|---|---|
app-name |
(必需)应用服务应用的名称。 |
publish-profile |
(可选)与 Web 应用(Windows 和 Linux)和 Web 应用容器(Linux)一起使用。 不支持多容器方案。 使用 Web 部署密钥发布配置文件 \*.publishsettings 的内容。 |
slot-name |
(可选)输入生产槽以外的现有槽。 |
package |
(可选)仅用于 Web 应用:包或文件夹的路径。
\*.zip、 \*.war、 \*.jar或要部署的文件夹。 |
images |
(必需)仅用于 Web 应用容器:指定完全限定的容器映像名称。 例如,myregistry.azurecr.io/nginx:latest 或 python:3.12.12-alpine/。 对于多容器应用,可以提供多个容器映像名称(多行分隔)。 |
configuration-file |
(可选)仅用于 Web 应用容器:Docker Compose 文件的路径。 应为完全限定的路径或相对于默认工作目录的路径。 对于多容器应用是必需的。 |
startup-command |
(可选)输入启动命令。 例如:dotnet run 或 dotnet filename.dll。 |
name: Linux Container Node Workflow
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: azure/docker-login@v1
with:
login-server: mycontainer.azurecr.io
username: ${{ secrets.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_PASSWORD }}
- run: |
docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
docker push mycontainer.azurecr.io/myapp:${{ github.sha }}
- uses: azure/webapps-deploy@v2
with:
app-name: 'myapp'
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
images: 'mycontainer.azurecr.io/myapp:${{ github.sha }}'
name: Windows_Container_Workflow
on: [push]
jobs:
build:
runs-on: windows-latest
steps:
- uses: actions/checkout@v2
- uses: azure/docker-login@v1
with:
login-server: mycontainer.azurecr.io
username: ${{ secrets.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_PASSWORD }}
- run: |
docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
docker push mycontainer.azurecr.io/myapp:${{ github.sha }}
- uses: azure/webapps-deploy@v2
with:
app-name: 'myapp'
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
images: 'mycontainer.azurecr.io/myapp:${{ github.sha }}'
相关内容
你可以在 GitHub 上找到我们按不同存储库分组的一系列操作。 每个存储库都包含文档和示例,可帮助你将 GitHub 用于 CI/CD 并将应用部署到 Azure。