简介
本指南说明如何使用 GitHub Actions 构建项目并将其部署到 Azure Kubernetes 服务。
注意: 如果 GitHub Actions 工作流需要访问支持 OpenID Connect (OIDC) 的云提供商提供的资源,则可以将工作流配置为直接向云提供商进行身份验证。 这样就可以停止将这些凭据存储为长期存在的机密,并提供其他安全优势。 有关详细信息,请参阅“关于使用 OpenID Connect 进行安全强化”。 和“在 Azure 中配置 OpenID Connect”。
先决条件
在创建 GitHub Actions 工作流程之前,首先需要完成以下设置步骤:
-
创建目标 AKS 群集和 Azure 容器注册表 (ACR)。 有关详细信息,请参阅 Azure 文档中的“快速入门:使用 Azure 门户部署 AKS 群集 - Azure Kubernetes 服务”和“快速入门 - 在门户中创建注册表 - Azure 容器注册表”。
-
创建名为
AZURE_CREDENTIALS
的机密来存储 Azure 凭据。 有关如何查找此信息和构造机密的详细信息,请参阅Azure/login
操作文档。
创建工作流程
完成先决条件后,可以继续创建工作流程。
以下示例工作流程演示在将代码推送到存储库时,如何构建项目并将其部署到 Azure Kubernetes Service。
在工作流 env
键下,更改以下值:
- 将
AZURE_CONTAINER_REGISTRY
更改为容器注册表的名称 - 将
PROJECT_NAME
更改为项目的名称 - 将
RESOURCE_GROUP
更改为包含 AKS 群集的资源组 - 将
CLUSTER_NAME
更改为 AKS 群集名称
此工作流使用 helm
呈现引擎来执行 azure/k8s-bake
操作。 如果将使用 helm
呈现引擎,请将 CHART_PATH
的值更改为 helm 文件的路径。 将 CHART_OVERRIDE_PATH
更改为覆盖文件路径的数组。 如果使用其他呈现引擎,请更新发送到 azure/k8s-bake
操作的输入参数。
# 此工作流使用未经 GitHub 认证的操作。 # 它们由第三方提供,并受 # 单独的服务条款、隐私政策和支持 # 文档。 # GitHub 建议将操作固定到提交 SHA。 # 若要获取较新版本,需要更新 SHA。 # 还可以引用标记或分支,但该操作可能会更改而不发出警告。 name: Build and deploy to Azure Kubernetes Service env: AZURE_CONTAINER_REGISTRY: MY_REGISTRY_NAME # set this to the name of your container registry PROJECT_NAME: MY_PROJECT_NAME # set this to your project's name RESOURCE_GROUP: MY_RESOURCE_GROUP # set this to the resource group containing your AKS cluster CLUSTER_NAME: MY_CLUSTER_NAME # set this to the name of your AKS cluster REGISTRY_URL: MY_REGISTRY_URL # set this to the URL of your registry # If you bake using helm: CHART_PATH: MY_HELM_FILE # set this to the path to your helm file CHART_OVERRIDE_PATH: MY_OVERRIDE_FILES # set this to an array of override file paths on: [push] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Azure Login uses: azure/login@14a755a4e2fd6dff25794233def4f2cf3f866955 with: creds: ${{ secrets.AZURE_CREDENTIALS }} - name: Build image on ACR uses: azure/CLI@61bb69d64d613b52663984bf12d6bac8fd7b3cc8 with: azcliversion: 2.29.1 inlineScript: | az configure --defaults acr=${{ env.AZURE_CONTAINER_REGISTRY }} az acr build -t -t ${{ env.REGISTRY_URL }}/${{ env.PROJECT_NAME }}:${{ github.sha }} - name: Gets K8s context uses: azure/aks-set-context@94ccc775c1997a3fcfbfbce3c459fec87e0ab188 with: creds: ${{ secrets.AZURE_CREDENTIALS }} resource-group: ${{ env.RESOURCE_GROUP }} cluster-name: ${{ env.CLUSTER_NAME }} id: login - name: Configure deployment uses: azure/k8s-bake@61041e8c2f75c1f01186c8f05fb8b24e1fc507d8 with: renderEngine: 'helm' helmChart: ${{ env.CHART_PATH }} overrideFiles: ${{ env.CHART_OVERRIDE_PATH }} overrides: | replicas:2 helm-version: 'latest' id: bake - name: Deploys application - uses: Azure/k8s-deploy@dd4bbd13a5abd2fc9ca8bdcb8aee152bb718fa78 with: manifests: ${{ steps.bake.outputs.manifestsBundle }} images: | ${{ env.AZURE_CONTAINER_REGISTRY }}.azurecr.io/${{ env.PROJECT_NAME }}:${{ github.sha }} imagepullsecrets: | ${{ env.PROJECT_NAME }}
# 此工作流使用未经 GitHub 认证的操作。
# 它们由第三方提供,并受
# 单独的服务条款、隐私政策和支持
# 文档。
# GitHub 建议将操作固定到提交 SHA。
# 若要获取较新版本,需要更新 SHA。
# 还可以引用标记或分支,但该操作可能会更改而不发出警告。
name: Build and deploy to Azure Kubernetes Service
env:
AZURE_CONTAINER_REGISTRY: MY_REGISTRY_NAME # set this to the name of your container registry
PROJECT_NAME: MY_PROJECT_NAME # set this to your project's name
RESOURCE_GROUP: MY_RESOURCE_GROUP # set this to the resource group containing your AKS cluster
CLUSTER_NAME: MY_CLUSTER_NAME # set this to the name of your AKS cluster
REGISTRY_URL: MY_REGISTRY_URL # set this to the URL of your registry
# If you bake using helm:
CHART_PATH: MY_HELM_FILE # set this to the path to your helm file
CHART_OVERRIDE_PATH: MY_OVERRIDE_FILES # set this to an array of override file paths
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Azure Login
uses: azure/login@14a755a4e2fd6dff25794233def4f2cf3f866955
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Build image on ACR
uses: azure/CLI@61bb69d64d613b52663984bf12d6bac8fd7b3cc8
with:
azcliversion: 2.29.1
inlineScript: |
az configure --defaults acr=${{ env.AZURE_CONTAINER_REGISTRY }}
az acr build -t -t ${{ env.REGISTRY_URL }}/${{ env.PROJECT_NAME }}:${{ github.sha }}
- name: Gets K8s context
uses: azure/aks-set-context@94ccc775c1997a3fcfbfbce3c459fec87e0ab188
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
resource-group: ${{ env.RESOURCE_GROUP }}
cluster-name: ${{ env.CLUSTER_NAME }}
id: login
- name: Configure deployment
uses: azure/k8s-bake@61041e8c2f75c1f01186c8f05fb8b24e1fc507d8
with:
renderEngine: 'helm'
helmChart: ${{ env.CHART_PATH }}
overrideFiles: ${{ env.CHART_OVERRIDE_PATH }}
overrides: |
replicas:2
helm-version: 'latest'
id: bake
- name: Deploys application
- uses: Azure/k8s-deploy@dd4bbd13a5abd2fc9ca8bdcb8aee152bb718fa78
with:
manifests: ${{ steps.bake.outputs.manifestsBundle }}
images: |
${{ env.AZURE_CONTAINER_REGISTRY }}.azurecr.io/${{ env.PROJECT_NAME }}:${{ github.sha }}
imagepullsecrets: |
${{ env.PROJECT_NAME }}
其他资源
以下资源也可能有用:
- 对于原始初学者工作流,请参阅 GitHub Actions
starter-workflows
存储库中的azure-kubernetes-service.yml
。 - 此工作流中使用的操作是官方 Azure
Azure/login
、Azure/aks-set-context
、Azure/CLI
、Azure/k8s-bake
,以及Azure/k8s-deploy
操作。 - 有关部署到 Azure 的 GitHub 操作工作流的更多示例,请参阅 actions-workflow-samples 存储库。