使用 GitHub Actions 部署到 Azure 容器应用
Azure 容器应用允许使用 GitHub Actions 将修订版本发布到容器应用。 将提交推送到 GitHub 存储库时,会触发一个工作流,从而更新容器注册表中的容器映像。 Azure 容器应用基于更新的容器映像创建新修订版。
向存储库中的特定分支提交会触发 GitHub Actions 工作流。 创建工作流时,决定触发工作流的分支。
本文介绍如何创建完全可自定义的工作流。 若要使用 Azure CLI 生成初学者 GitHub Actions 工作流,请参阅使用 Azure CLI 生成 GitHub Actions 工作流。
Azure 容器应用 GitHub 操作
若要生成和部署容器应用,请将 azure/container-apps-deploy-action
操作添加到 GitHub Actions 工作流中。
此操作支持以下方案:
- 从 Dockerfile 生成并部署到容器应用
- 在没有 Dockerfile 的情况下从源代码生成并部署到容器应用。 支持的语言包括 .NET、Java、Node.js、PHP 和 Python
- 将现有容器映像部署到容器应用
用法示例
下面是使用该操作的一些常见方案。 有关详细信息,请参阅操作的 GitHub 市场页。
生成并部署到容器应用
以下代码片段演示如何从源代码生成容器映像并将其部署到容器应用。
steps:
- name: Log in to Azure
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Build and deploy Container App
uses: azure/container-apps-deploy-action@v1
with:
appSourcePath: ${{ github.workspace }}/src
acrName: myregistry
containerAppName: my-container-app
resourceGroup: my-rg
该操作使用 appSourcePath
中的 Dockerfile 生成容器映像。 如果找不到 Dockerfile,该操作将尝试从 appSourcePath
中的源代码生成容器映像。
将现有容器映像部署到容器应用
以下代码片段演示如何将现有容器映像部署到容器应用。
steps:
- name: Log in to Azure
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Build and deploy Container App
uses: azure/container-apps-deploy-action@v1
with:
acrName: myregistry
containerAppName: my-container-app
resourceGroup: my-rg
imageToDeploy: myregistry.azurecr.cn/app:${{ github.sha }}
重要
如果你在单独的步骤中生成容器映像,请确保使用提交 SHA 等唯一标记,而不要使用类似于 latest
的稳定标记。 有关详细信息,请参阅映像标记最佳做法。
使用 Azure 容器注册表进行身份验证
Azure 容器应用操作需要向 Azure 容器注册表进行身份验证才能推送容器映像。 容器应用也需要向 Azure 容器注册表进行身份验证才能拉取容器映像。
要推送映像,操作将使用提供给 azure/login
操作的凭据自动通过 acrName
中指定的容器注册表进行身份验证。
为了拉取映像,Azure 容器应用将使用托管标识(建议)或管理员凭据向 Azure 容器注册表进行身份验证。 若要使用托管标识,必须将操作所部署的容器应用程序配置为使用托管标识。 若要使用注册表的管理员凭据进行身份验证,请设置操作的 acrUsername
和 acrPassword
输入。
配置
可以执行以下步骤来配置 GitHub Actions 工作流以部署到 Azure 容器应用。
- 为应用创建 GitHub 存储库
- 创建启用了托管标识的容器应用
- 将 Azure 容器注册表的
AcrPull
角色分配到容器应用的托管标识 - 在 GitHub 存储库中配置机密
- 创建 GitHub Actions 工作流
先决条件
要求 | 说明 |
---|---|
Azure 帐户 | 如果没有,请创建一个试用版订阅。 需要拥有 Azure 订阅的“参与者”或“所有者”权限才能继续操作。 有关详细信息,请参阅使用 Azure 门户分配 Azure 角色。 |
GitHub 帐户 | 免费注册。 |
Azure CLI | 安装 Azure CLI。 |
创建 GitHub 存储库并克隆源代码
在创建工作流之前,应用的源代码必须在 GitHub 存储库中。
通过 Azure CLI 登录 Azure。
az cloud set -n AzureChinaCloud az login # az cloud set -n AzureCloud //means return to Public Azure.
接下来,安装适用于 CLI 的最新 Azure 容器应用扩展。
az extension add --name containerapp --upgrade
如果没有自己的 GitHub 存储库,请按照示例创建一个。
- 导航到以下位置以创建新存储库:
- 将存储库命名为
my-container-app
。
将存储库克隆到本地计算机。
git clone https://github.com/<YOUR_GITHUB_ACCOUNT_NAME>/my-container-app.git
创建启用了托管标识的容器应用
在以下步骤中,使用 az containerapp up
命令创建容器应用。 此命令将创建 Azure 资源,生成容器映像,将映像存储在注册表中,然后将其部署到容器应用。
创建应用程序后,你可以将托管标识添加到应用中,并为该标识分配 AcrPull
角色,以允许该标识从注册表中提取映像。
切换到克隆的存储库的 src 文件夹。
cd my-container-app cd src
使用
az containerapp up
命令创建 Azure 资源并部署容器应用。az containerapp up \ --name my-container-app \ --source . \ --ingress external
在命令输出中,记下 Azure 容器注册表的名称。
获取容器注册表的完整资源 ID。
az acr show --name <ACR_NAME> --query id --output tsv
将
<ACR_NAME>
替换为注册表的名称。为容器应用启用托管标识。
az containerapp identity assign \ --name my-container-app \ --resource-group my-container-app-rg \ --system-assigned \ --output tsv
在命令输出中,记下托管标识的主体 ID。
将 Azure 容器注册表的
AcrPull
角色分配到容器应用的托管标识。az role assignment create \ --assignee <MANAGED_IDENTITY_PRINCIPAL_ID> \ --role AcrPull \ --scope <ACR_RESOURCE_ID>
请将
<MANAGED_IDENTITY_PRINCIPAL_ID>
替换为托管标识的主体 ID,并将<ACR_RESOURCE_ID>
替换为 Azure 容器注册表的资源 ID。配置容器应用以使用托管标识从 Azure 容器注册表中拉取映像。
az containerapp registry set \ --name my-container-app \ --resource-group my-container-app-rg \ --server <ACR_NAME>.azurecr.io \ --identity system
将
<ACR_NAME>
替换为 Azure 容器注册表的名称。
在 GitHub 存储库中配置机密
GitHub 工作流需要名为“AZURE_CREDENTIALS
”的机密才能通过 Azure 的身份验证。 该机密包含在包含容器应用程序和容器注册表的资源组上具有“参与者”角色的服务主体的凭据。
在包含容器应用和容器注册表的资源组上创建具有“参与者”角色的服务主体。
az ad sp create-for-rbac \ --name my-app-credentials \ --role contributor \ --scopes /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/my-container-app-rg \ --json-auth \ --output json
将
<SUBSCRIPTION_ID>
替换为你的 Azure 订阅的 ID。 如果容器注册表位于不同的资源组中,请在--scopes
参数中指定这两个资源组。从命令中复制 JSON 输出。
在 GitHub 存储库中,导航到“设置”>“机密”>“操作”,然后选择“新建存储库机密”。
输入
AZURE_CREDENTIALS
作为名称,并将 JSON 输出的内容粘贴为值。选择“添加机密”。
创建 GitHub Actions 工作流
在 GitHub 存储库中,导航到“操作”,然后选择“新建工作流”。
选择“自己设置工作流”。
将以下 YAML 粘贴到编辑器中。
name: Azure Container Apps Deploy on: push: branches: - main jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Log in to Azure uses: azure/login@v1 with: creds: ${{ secrets.AZURE_CREDENTIALS }} - name: Build and deploy Container App uses: azure/container-apps-deploy-action@v1 with: appSourcePath: ${{ github.workspace }}/src acrName: <ACR_NAME> containerAppName: my-container-app resourceGroup: my-container-app-rg
将
<ACR_NAME>
替换为 Azure 容器注册表的名称。 确认branches
下的分支名称以及appSourcePath
、containerAppName
和resourceGroup
的值与存储库和 Azure 资源的值匹配。提交对主分支的更改。
GitHub Actions 工作流运行应开始生成和部署容器应用。 若要检查其进度,请导航到“操作”。
若要部署应用的新修订版,请将新提交推送到 main 分支。