使用 GitHub Actions 建置及測試容器並部署至 Azure Kubernetes Service (AKS)

GitHub Actions 可讓您彈性地建置自動化軟體開發生命週期工作流程。 您可以使用多個 Kubernetes 動作,透過 GitHub Actions,部署到從 Azure Container Registry (ACR) 至 Azure Kubernetes Service (AKS) 的容器。

必要條件

適用於 AKS 的 GitHub Actions

使用 GitHub Actions,您可以在 GitHub 內將軟體開發工作流程自動化。 如需詳細資訊,請參閱適用於 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 (英文)

搭配 AKS 使用 GitHub Actions

例如,您可以使用 GitHub Actions,在每次變更推送至 GitHub 存放庫時,將應用程式部署到 AKS 叢集。 此範例會使用 Azure 投票應用程式。

注意

此範例會使用服務主體來驗證您的 ACR 和 AKS 叢集。 或者,您可設定 Open ID Connect (OIDC),並更新 azure/login 動作以使用 OIDC。 如需詳細資訊,請參閱使用 OpenID Connect 驗證設定 Azure 登入 (部分機器翻譯)。

派生並更新存放庫

  1. 瀏覽至 Azure 投票 (英文) 存放庫,然後選取 [派生]

  2. 更新 azure-vote-all-in-one-redis.yaml,以針對 azure-vote-front 映像使用您的 ACR。 以您的登錄名稱取代 <registryName>

    ...
          containers:
          - name: azure-vote-front
            image: <registryName>.azurecr.io/azuredocs/azure-vote-front:v1
    ...
    
  3. 將更新的 azure-vote-all-in-one-redis.yaml 認可至您的存放庫。

建立祕密

  1. 使用 az ad sp create-for-rbac (部分機器翻譯) 命令來建立服務主體,以使用 Contributor 角色存取資源群組。 以您 Azure 帳戶的訂用帳戶識別碼取代 <SUBSCRIPTION_ID>,並以包含您 ACR 的資源群組名稱取代 <RESOURCE_GROUP>

    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>,
      ...
    }
    
  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.io/${{ secrets.repository }}/azure-vote-front:${{ github.sha }}'
              pull-images: false 
    

    on 區段包含觸發動作的事件。 在範例檔案中,將變更推送至 azure-vote 目錄時,動作就會觸發。

    steps 區段包含每個不同的動作:

    1. 「簽出原始程式碼」會使用 GitHub Actions 簽出動作來複製存放庫。
    2. 「ACR 建置」會使用 Azure Container Registry 建置動作來建置映像,並將其上傳至您的登錄。
    3. 「Azure 登入」會使用 Azure 登入動作來登入您的 Azure 帳戶。
    4. 「設定 AKS 內容」會使用 Azure AKS 設定內容動作來設定 AKS 叢集的內容。
    5. 「設定 kubectl」會使用 Azure AKS 設定 Kubectl 動作,在您的執行器上安裝 kubectl。
    6. 「部署至 AKS」會使用 Azure Kubernetes 部署動作 (英文),將應用程式部署至 Kubernetes 叢集。
  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 的下列入門工作流程。 如需詳細資訊,請參閱使用入門工作流程 (英文)。