使用 GitHub Actions 生成和测试容器并将其部署到 Azure Kubernetes 服务 (AKS)
可以通过 GitHub Actions 灵活地生成自动化软件开发生命周期工作流。 可以使用多个 Kubernetes 操作通过 GitHub Actions 将 Azure 容器注册表 (ACR) 中的容器部署到 Azure Kubernetes 服务 (AKS)。
先决条件
- 具有活动订阅的 Azure 帐户。 创建试用版订阅。
- 一个 GitHub 帐户。 如果你没有帐户,可免费注册一个。
- 使用 GitHub Actions 时,需要配置 Azure 与 GitHub 存储库之间的集成。
- 包含附加的 ACR 的现有 AKS 群集。 如果没有 AKS 群集,请参阅使用来自 AKS 的 ACR 进行身份验证。
适用于 AKS 的 GitHub Actions
GitHub Actions 可帮助你从 GitHub 内部自动化软件开发工作流。 有关详细信息,请参阅 [GitHub Actions for Azure][github-actions]。
下表列出了 AKS 可用的操作:
名称 | 说明 | 更多详细信息 |
---|---|---|
azure/aks-set-context |
为其他操作设置目标 AKS 群集上下文,以使用或运行任何 kubectl 命令。 | azure/aks-set-context |
azure/k8s-set-context |
为其他操作设置目标 Kubernetes 群集上下文,以使用或运行任何 kubectl 命令。 | azure/k8s-set-context |
azure/k8s-bake |
烘焙清单文件,用于通过 Helm、kustomize 或 kompose 进行部署。 | azure/k8s-bake |
azure/k8s-create-secret |
在 Kubernetes 群集中创建通用机密或 docker 注册表机密。 | azure/k8s-create-secret |
azure/k8s-deploy |
将清单部署到 Kubernetes 群集。 | azure/k8s-deploy |
azure/k8s-lint |
验证/lint 清单文件。 | azure/k8s-lint |
azure/setup-helm |
在运行器上安装 Helm 二进制文件的特定版本。 | azure/setup-helm |
azure/setup-kubectl |
在运行器上安装 kubectl 的特定版本。 | azure/setup-kubectl |
azure/k8s-artifact-substitute |
更新容器映像的标记或摘要。 | azure/k8s-artifact-substitute |
azure/aks-create-action |
使用 Terraform 创建 AKS 群集。 | azure/aks-create-action |
azure/aks-github-runner |
为GitHub Actions设置自托管代理。 | azure/aks-github-runner |
azure/acr-build |
使用 ACR 生成容器。 | azure/acr-build |
将 GitHub Actions 与 AKS 配合使用
例如,每次将更改推送到 GitHub 存储库时,可以使用 GitHub Actions 将应用程序部署到 AKS 群集。 此示例使用 Azure Vote 应用程序。
注意
此示例使用服务主体向 ACR 和 AKS 群集进行身份验证。 或者,可以配置 Open ID Connect (OIDC) 并更新 azure/login
操作以使用 OIDC。
对存储库创建分叉并更新
导航到 Azure Vote 存储库,然后选择“分叉”。
更新
azure-vote-all-in-one-redis.yaml
以将 ACR 用于azure-vote-front
映像。 将<registryName>
替换为注册表的名称。... containers: - name: azure-vote-front image: <registryName>.azurecr.cn/azuredocs/azure-vote-front:v1 ...
将更新后的
azure-vote-all-in-one-redis.yaml
提交到存储库。
创建机密
使用 [
az ad sp create-for-rbac
][az-ad-sp-create-for-rbac] 命令创建服务主体以使用Contributor
角色访问资源组。 将<SUBSCRIPTION_ID>
替换为 Azure 帐户的订阅 ID,将<RESOURCE_GROUP>
替换为包含 ACR 的资源组的名称。az ad sp create-for-rbac \ --name "ghActionAzureVote" \ --scope /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP> \ --role Contributor \ --json-auth
输出应类似于以下示例输出:
{ "clientId": <clientId>, "clientSecret": <clientSecret>, "subscriptionId": <subscriptionId>, "tenantId": <tenantId>, ... }
导航到 GitHub 存储库设置,然后选择“安全性”>“机密和变量”>“操作”。
对于每个机密,请选择“新建存储库机密”,并输入机密的名称和值。
密钥名称 机密值 AZURE_CREDENTIALS az ad sp create-for-rbac
命令的整个 JSON 输出。service_principal <clientId>
的值。service_principal_password <clientSecret>
的值。订阅 <subscriptionId>
的值。tenant <tenantId>
的值。注册表 注册表的名称。 repository azuredocs resource_group 资源组名称。 cluster_name 群集的名称。
要详细了解如何创建机密,请参阅加密的机密。
创建操作文件
在你的存储库中,创建
.github/workflows/main.yml
并粘贴在以下内容中:name: build_deploy_aks on: push: paths: - "azure-vote/**" jobs: build: runs-on: ubuntu-latest steps: - name: Checkout source code uses: actions/checkout@v3 - name: ACR build id: build-push-acr uses: azure/acr-build@v1 with: service_principal: ${{ secrets.service_principal }} service_principal_password: ${{ secrets.service_principal_password }} tenant: ${{ secrets.tenant }} registry: ${{ secrets.registry }} repository: ${{ secrets.repository }} image: azure-vote-front folder: azure-vote branch: master tag: ${{ github.sha }} - name: Azure login id: login uses: azure/login@v1.4.3 with: creds: ${{ secrets.AZURE_CREDENTIALS }} - name: Set AKS context id: set-context uses: azure/aks-set-context@v3 with: resource-group: '${{ secrets.resource_group }}' cluster-name: '${{ secrets.cluster_name }}' - name: Setup kubectl id: install-kubectl uses: azure/setup-kubectl@v3 - name: Deploy to AKS id: deploy-aks uses: Azure/k8s-deploy@v4 with: namespace: 'default' manifests: | azure-vote-all-in-one-redis.yaml images: '${{ secrets.registry }}.azurecr.cn/${{ secrets.repository }}/azure-vote-front:${{ github.sha }}' pull-images: false
on
部分包含触发操作的事件。 在示例文件中,将更改推送到azure-vote
目录时会触发该操作。steps
节包含每个不同的操作:- Checkout source code 使用 GitHub Actions 签出操作克隆存储库。
- ACR build使用 Azure 容器注册表生成操作生成映像并将其上传到注册表。
- Azure login 使用 Azure 登录操作登录 Azure 帐户。
- Set AKS context 使用 Azure AKS 设置上下文操作为 AKS 群集设置上下文。
- Setup kubectl 使用 Azure AKS 安装程序 Kubectl 操作在运行器上安装 kubectl。
- Deploy to AKS 使用 Azure Kubernetes 部署操作将应用程序部署到 Kuberentes 群集。
将
.github/workflows/main.yml
文件提交到存储库。若要确认该操作是否正常工作,请使用以下内容更新
azure-vote/azure-vote/config_file.cfg
:# UI Configurations TITLE = 'Azure Voting App' VOTE1VALUE = 'Fish' VOTE2VALUE = 'Dogs' SHOWHOST = 'false'
将更新后的
azure-vote/azure-vote/config_file.cfg
提交到存储库。在存储库中,选择“操作”,确认工作流正在运行。 然后,确认工作流具有绿色复选标记,并且更新的应用程序已部署到群集。
后续步骤
查看适用于 AKS 的以下初学者工作流。 有关详细信息,请参阅使用入门工作流。