使用 GitHub Actions 生成和测试容器并将其部署到 Azure Kubernetes 服务 (AKS)

可以通过 GitHub Actions 灵活地生成自动化软件开发生命周期工作流。 可以使用多个 Kubernetes 操作通过 GitHub Actions 将 Azure 容器注册表 (ACR) 中的容器部署到 Azure Kubernetes 服务 (AKS)。

先决条件

适用于 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。

对存储库创建分叉并更新

  1. 导航到 Azure Vote 存储库,然后选择“分叉”。

  2. 更新 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
    ...
    
  3. 将更新后的 azure-vote-all-in-one-redis.yaml 提交到存储库。

创建机密

  1. 使用 [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 \
        --sdk-auth
    

    输出应类似于以下示例输出:

    {
      "clientId": <clientId>,
      "clientSecret": <clientSecret>,
      "subscriptionId": <subscriptionId>,
      "tenantId": <tenantId>,
      ...
    }
    
  2. 导航到 GitHub 存储库设置,然后选择“安全性”>“机密和变量”>“操作”。

  3. 对于每个机密,请选择“新建存储库机密”,并输入机密的名称和值。

    密钥名称 机密值
    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 群集的名称。

要详细了解如何创建机密,请参阅加密的机密

创建操作文件

  1. 在你的存储库中,创建 .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 节包含每个不同的操作:

    1. Checkout source code 使用 GitHub Actions 签出操作克隆存储库。
    2. ACR build使用 Azure 容器注册表生成操作生成映像并将其上传到注册表。
    3. Azure login 使用 Azure 登录操作登录 Azure 帐户。
    4. Set AKS context 使用 Azure AKS 设置上下文操作为 AKS 群集设置上下文。
    5. Setup kubectl 使用 Azure AKS 安装程序 Kubectl 操作在运行器上安装 kubectl。
    6. Deploy to AKS 使用 Azure Kubernetes 部署操作将应用程序部署到 Kuberentes 群集。
  2. .github/workflows/main.yml 文件提交到存储库。

  3. 若要确认该操作是否正常工作,请使用以下内容更新 azure-vote/azure-vote/config_file.cfg

    # UI Configurations
    TITLE = 'Azure Voting App'
    VOTE1VALUE = 'Fish'
    VOTE2VALUE = 'Dogs'
    SHOWHOST = 'false'
    
  4. 将更新后的 azure-vote/azure-vote/config_file.cfg 提交到存储库。

  5. 在存储库中,选择“操作”,确认工作流正在运行。 然后,确认工作流具有绿色复选标记,并且更新的应用程序已部署到群集。

后续步骤

查看适用于 AKS 的以下初学者工作流。 有关详细信息,请参阅使用入门工作流