使用 GitHub Actions 建置及測試容器並部署至 Azure Kubernetes Service (AKS)
GitHub Actions 可讓您彈性地建置自動化軟體開發生命週期工作流程。 您可以使用多個 Kubernetes 動作,透過 GitHub Actions,部署到從 Azure Container Registry (ACR) 至 Azure Kubernetes Service (AKS) 的容器。
必要條件
- 具有有效訂用帳戶的 Azure 帳戶。 如果您沒有帳戶,可免費建立帳戶。
- GitHub 帳戶。 如果您沒有 Microsoft 帳戶,請免費註冊。
- 使用 GitHub Actions 時,您必須設定 Azure 與 GitHub 存放庫之間的整合。 若要設定整合,請參閱使用 GitHub Actions 連線到 Azure (部分機器翻譯)。
- 具有已連結之 ACR 的現有 AKS 叢集。 如果您沒有,請參閱從 AKS 使用 ACR 進行驗證 (部分機器翻譯)。
適用於 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 登入 (部分機器翻譯)。
派生並更新存放庫
瀏覽至 Azure 投票 (英文) 存放庫,然後選取 [派生]。
更新
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 ...
將更新的
azure-vote-all-in-one-redis.yaml
認可至您的存放庫。
建立祕密
使用
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>, ... }
瀏覽至您的 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.io/${{ secrets.repository }}/azure-vote-front:${{ github.sha }}' pull-images: false
on
區段包含觸發動作的事件。 在範例檔案中,將變更推送至azure-vote
目錄時,動作就會觸發。steps
區段包含每個不同的動作:- 「簽出原始程式碼」會使用 GitHub Actions 簽出動作來複製存放庫。
- 「ACR 建置」會使用 Azure Container Registry 建置動作來建置映像,並將其上傳至您的登錄。
- 「Azure 登入」會使用 Azure 登入動作來登入您的 Azure 帳戶。
- 「設定 AKS 內容」會使用 Azure AKS 設定內容動作來設定 AKS 叢集的內容。
- 「設定 kubectl」會使用 Azure AKS 設定 Kubectl 動作,在您的執行器上安裝 kubectl。
- 「部署至 AKS」會使用 Azure Kubernetes 部署動作 (英文),將應用程式部署至 Kubernetes 叢集。
將
.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 的下列入門工作流程。 如需詳細資訊,請參閱使用入門工作流程 (英文)。