你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
本文介绍如何从托管 Azure 容器注册表 存储库或 Docker 中心为自定义容器映像配置持续集成和持续交付(CI/CD)。
1. 转到部署中心
在 Azure 门户中,转到 Azure 应用服务应用的管理窗格。
在 “部署”下的边栏菜单中,选择 “部署中心”。 选择“设置”选项卡。
2.选择代码源代码
从 “源 ”下拉菜单中,根据以下条件选择部署源:
- 容器注册表服务在容器注册表与应用服务之间设置了 CI/CD。
- 如果在 GitHub 中维护容器映像的源代码,请选择“ GitHub Actions ”选项。 对 GitHub 存储库的新提交会触发部署操作,该操作可以直接运行
docker build
和docker push
到容器注册表。 然后,它会更新应用服务应用以运行新映像。 有关详细信息,请参阅如何在 GitHub Actions 中实现 CI/CD。 - 要使用 Azure Pipelines 设置 CI/CD,请参阅从 Azure Pipelines 部署 Azure Web 应用容器。
- 对于 Docker Compose 应用,请选择“容器注册表”。
如果选择 GitHub Actions,请选择“ 授权 ”,然后按照授权提示进行作。 如果以前通过 GitHub 授权,可以通过选择 “更改帐户”从其他用户的存储库进行部署。
使用 GitHub 授权 Azure 帐户后,选择要从中部署 的组织、 存储库和 分支 。
2. 配置注册表设置
3. 配置注册表设置
注意
Sidecar 容器将在应用服务中取代多容器(Docker Compose)应用。 若要开始,请参阅 教程:在 Azure 应用服务中为自定义容器配置 sidecar 容器。
若要部署多容器(Docker Compose)应用,请在容器类型中选择 Docker Compose。
如果未看到 “容器类型 ”下拉列表,请向上滚动到 “源 ”并选择 “容器注册表”。
在 注册表源中,选择容器注册表所在的位置。 如果不是 Azure 容器注册表或 Docker 中心,请选择 专用注册表。
注意
如果多容器(Docker Compose)应用使用多个专用映像,请确保专用映像位于同一专用注册表中,并且可通过相同的用户凭据访问。 如果多容器应用仅使用公共映像,请选择 Docker 中心,即使某些映像不在 Docker Hub 中也是如此。
选择与你的选择匹配的选项卡,执行后续步骤。
“注册表”下拉列表显示与你的应用位于同一订阅中的注册表。 选择所需的注册表。
若要从其他订阅中的注册表进行部署,请改为在注册表源中选择“专用注册表”。
若要使用托管标识锁定 Azure 容器注册表访问权限,请参阅:
选择要部署的 映像 和 标记 。 可以选择在 启动文件中键入启动命令。
请按下一步进行操作,具体取决于 容器类型 值:
- 对于Docker Compose,请选择私有镜像的注册表。 选择 选择文件 来上传您的 Docker Compose 文件,或者直接将 Docker Compose 文件的内容粘贴到 Config 中。
- 对于 单个容器,请选择要部署的 映像 和 标记 。 可以选择在 启动文件中键入启动命令。
当你启动容器时,应用服务会将启动文件中的字符串追加到 。
3. 启用 CI/CD
4. 启用 CI/CD
应用服务支持 CI/CD 与 Azure 容器注册表和 Docker Hub 集成。 若要启用 CI/CD 集成,请在持续部署中选择“打开”。
注意
如果在源中选择 GitHub Actions,则看不到此选项,因为 CI/CD 由 GitHub Actions 直接处理。 而是会看到 “工作流配置 ”部分,可在其中选择 “预览”文件 来检查工作流文件。 Azure 会将此文件提交到选定的 GitHub 源存储库中,以处理生成和部署任务。 有关详细信息,请参阅如何在 GitHub Actions 中实现 CI/CD。
启用此选项后,应用服务会将 Webhook 添加到 Azure 容器注册表或 Docker Hub 中的存储库。 每当通过 docker push
更新你选定的映像时,存储库便会将其发布到此 Webhook。 Webhook 会导致应用服务应用重启并运行 docker pull
以获取更新后的映像。
为了确保 Webhook 正常运行,必须启用 Web 应用中 的基本身份验证发布凭据 选项。 否则,可能会收到 Webhook 的“401 未授权”错误。
若要验证是否启用了 基本身份验证发布凭据 ,请转到 Web 应用的 配置>常规设置。 查找 “平台设置” 部分,然后选择 “基本身份验证发布凭据 ”选项。
对于其他专用注册表,可以手动或在 CI/CD 管道中将其发布到 Webhook。 在 Webhook URL 中,选择 “复制 ”按钮以获取 Webhook URL。
选择“保存”以保存设置。
注意
对多容器(Docker Compose)应用的支持有限。 对于 Azure 容器注册表,应用服务会在选定的注册表中创建一个范围为该注册表的 Webhook。 通过 docker push
命令推送到注册表中任何存储库(包括 Docker Compose 文件未引用的存储库)会触发应用重启。 你可能需要修改 Webhook 以缩小范围。 Docker Hub 不支持注册表级别的 Webhook。 必须手动将 Webhook 添加到 Docker Compose 文件中指定的映像。
如何在 GitHub Actions 中实现 CI/CD
如果从“选择代码源”下拉菜单中选择 GitHub Actions,应用服务会通过以下方式设置 CI/CD:
- 它将 GitHub Actions 工作流文件存入 GitHub 存储库,以处理生成任务并将其部署到应用服务。
- 它将专用注册表的凭据添加为 GitHub 机密。 生成的工作流文件运行
Azure/docker-login
操作以登录到专用注册表,然后运行docker push
以部署到该注册表。 - 它会添加应用的发布配置文件作为 GitHub 机密。 生成的工作流文件使用此机密对应用服务进行身份验证,然后运行
Azure/webapps-deploy
作来配置更新的映像,这会触发应用重启以拉取更新后的映像。 - 它从工作流运行日志捕获信息,并将其显示在应用的部署中心的“日志”选项卡中。
可通过以下方式自定义 GitHub Actions 生成提供程序:
- 在工作流文件在 GitHub 存储库中生成后,自定义该文件。 有关详细信息,请参阅 GitHub Actions 的工作流语法。 工作流必须以
Azure/webapps-deploy
动作结束,以触发应用重启。 - 如果所选分支受到保护,仍可以预览工作流文件,而无需保存配置。 手动将它和所需的 GitHub 机密添加到存储库中。 此方法无法在 Azure 门户中实现日志集成。
- 请使用 Microsoft Entra ID 中的服务主体进行部署,而不是使用发布配置文件。
使用服务主体进行身份验证
此可选配置会将默认身份验证替换为生成的工作流文件中的发布配置文件。
使用 az ad sp create-for-rbac
Azure CLI 中的命令生成服务主体。 在以下示例中,将 <subscription-id>、group-name< 和 >app-name 替换为自己的值。 将整个 JSON 输出保存到下一步骤中,包括顶层的{}
。
az ad sp create-for-rbac --name "myAppDeployAuth" --role contributor \
--scopes /subscriptions/<subscription-id>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name> \
--json-auth
重要
为了安全起见,请为服务主体授予所需的最低访问权限。 上一个示例中的范围仅限于特定的应用服务应用而不是整个资源组。
在 GitHub 中,转到存储库,然后选择 “设置>机密>添加新机密”。 将 Azure CLI 命令的整个 JSON 输出粘贴到机密的值字段中。 为机密指定一个名称,如下所示 AZURE_CREDENTIALS
。
在 部署中心生成的工作流文件中,使用类似于以下示例的代码修改 azure/webapps-deploy
步骤:
- name: Sign in to Azure
# Use the GitHub secret you added
- uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Deploy to Azure Web App
# Remove publish-profile
- uses: azure/webapps-deploy@v2
with:
app-name: '<app-name>'
slot-name: 'production'
images: '<registry-server>/${{ secrets.AzureAppService_ContainerUsername_... }}/<image>:${{ github.sha }}'
- name: Sign out of Azure
run: |
az logout
使用 CLI 进行自动化
若要配置容器注册表和 Docker 映像,请运行 az webapp config container set
。
az webapp config container set --name <app-name> --resource-group <group-name> --docker-custom-image-name '<image>:<tag>' --docker-registry-server-url 'https://<registry-name>.azurecr.io' --docker-registry-server-user '<username>' --docker-registry-server-password '<password>'
若要配置多容器(Docker Compose)应用,请在本地准备 Docker Compose 文件,然后使用参数运行az webapp config container set
--multicontainer-config-file
。 如果 Docker Compose 文件包含专用映像,请添加 --docker-registry-server-*
参数,如前面的示例所示。
az webapp config container set --resource-group <group-name> --name <app-name> --multicontainer-config-file <docker-compose-file>
若要将 CI/CD 从容器注册表配置到你的应用,请使用参数“az webapp deployment container config
”运行 --enable-cd
。 该命令将输出 Webhook URL,但必须在单独的步骤中在注册表中手动创建 Webhook。 以下示例在您的应用程序上启用 CI/CD,然后使用输出中的网络钩子 URL 在 Azure 容器注册表中创建网络钩子。
ci_cd_url=$(az webapp deployment container config --name <app-name> --resource-group <group-name> --enable-cd true --query CI_CD_URL --output tsv)
az acr webhook create --name <webhook-name> --registry <registry-name> --resource-group <group-name> --actions push --uri $ci_cd_url --scope '<image>:<tag>'