使用 Azure Pipelines 建置並部署至 Azure Kubernetes Service
Azure DevOps Services
使用 Azure Pipelines 自動部署至 Azure Kubernetes Service (AKS)。 Azure Pipelines 可讓您使用 Azure DevOps 建置、測試及部署持續整合 (CI) 與持續傳遞 (CD)。
在本文中,您將了解如何建立持續建置和部署應用程式的管線。 每當您在包含 Dockerfile 的存放庫中變更程式碼時,系統都會將映像推送至您的 Azure Container Registry,並接著將資訊清單部署至您的 AKS 叢集。
必要條件
- 具有有效訂用帳戶的 Azure 帳戶。 免費建立帳戶。
- Azure Resource Manager 服務連線。 建立 Azure Resource Manager 服務連線。
- GitHub 帳戶。 建立免費的 GitHub 帳戶 (如果您還沒有帳戶的話)。
取得程式碼
派生下列存放庫,其中包含範例應用程式和 Dockerfile:
https://github.com/MicrosoftDocs/pipelines-javascript-docker
建立 Azure 資源
登入 Azure 入口網站,然後選取右上角的 [Cloud Shell] 按鈕。 使用 Azure CLI 或 PowerShell 來建立 AKS 叢集。
建立容器登錄
# Create a resource group
az group create --name myapp-rg --location eastus
# Create a container registry
az acr create --resource-group myapp-rg --name mycontainerregistry --sku Basic
# Create a Kubernetes cluster
az aks create \
--resource-group myapp-rg \
--name myapp \
--node-count 1 \
--enable-addons monitoring \
--generate-ssh-keys
登入 Azure Pipelines
登入 Azure Pipelines。 登入之後,您的瀏覽器會前往 https://dev.azure.com/my-organization-name
並顯示您的 Azure DevOps 儀表板。
在您選取的組織內,建立一個「專案」。 如果您的組織中沒有任何專案,您會看到 [建立專案開始使用] 畫面。 否則,請選取儀表板右上角的 [建立專案] 按鈕。
建立管線
連線並選取您的存放庫
登入您的 Azure DevOps 組織並前往您的專案。
前往 [管線],然後選取 [新增管線]。
執行精靈的步驟,首先選取 [GitHub] 作為您的原始程式碼位置。
系統可能會將您重新導向至 GitHub 以進行登入。 若是如此,請輸入 GitHub 認證。
當您看到存放庫清單時,請選取您的存放庫。
系統可能會將您重新導向至 GitHub,以安裝 Azure Pipelines 應用程式。 如果發生此情況,請選取 [核准並安裝]。
選取 [部署至 Azure Kubernetes Service]。
如果出現提示,請選取您用來建立登錄和叢集的訂閱。
選取
myapp
叢集。針對 [命名空間],選取 [現有],然後選取 [預設]。
選取您的容器登錄名稱。
您可以將映像名稱保留設定為預設值。
將服務連接埠設定為 8080。
設定 [啟用提取要求的檢閱應用程式] 核取方塊,以在後續步驟中自動產生的管線 YAML 中包含檢閱應用程式 (部分機器翻譯) 相關設定。
選取 [驗證及設定]。
當 Azure Pipelines 建立您的管線時,該程序會:
建立「Docker 登錄服務連線」,以讓您的管線將映像推送至您的容器登錄。
建立一個「環境」及該環境中的 Kubernetes 資源。 針對已啟用 RBAC 的叢集,建立的 Kubernetes 資源會在叢集中隱含建立 ServiceAccount 和 RoleBinding 物件,讓建立的 ServiceAccount 無法在選擇的命名空間之外執行作業。
產生 azure-pipelines.yml 檔案,以定義您的管線。
產生 Kubernetes 資訊清單檔。 系統會根據您所做的選擇,將 deployment.yml 和 service.yml 範本序列化來產生這些檔案。 當您準備好時,請選取 [儲存並執行]。
選取儲存並執行。
您可以將 [認可訊息] 變更為像是「將管線新增至我們的存放庫」的內容。 當您準備好時,請選取 [儲存並執行] 將新管線認可至您的存放庫,然後開始第一次執行您的新管線!
查看您的應用程式部署
當管線執行時,請監看您的建置階段,然後是您的部署階段,從藍色 (執行中) 移至綠色 (已完成)。 您可以選取要監看管線運作的階段和作業。
注意
如果您使用 Microsoft 裝載的代理程式,則必須將 Microsoft 裝載代理程式的 IP 範圍新增至您的防火牆。 從每週 JSON 檔案取得每週 IP 範圍清單,此檔案會在每週三發佈。 新的 IP 範圍會在隔週一生效。 如需詳細資訊,請參閱 Microsoft 裝載的代理程式。 若要尋找您 Azure DevOps 組織所需的 IP 範圍,請了解如何識別 Microsoft 裝載代理程式可能的 IP 範圍。
管線執行完成之後,請探索發生什麼事,然後查看您已部署的應用程式。 從管線摘要:
選取 環境 索引標籤。
選取 [檢視環境]。
針對您部署的目的地命名空間,選取您應用程式的執行個體。 如果您使用預設值,則其為預設命名空間中的 myapp 應用程式。
選取 [服務] 索引標籤。
選取外部 IP 位址並將其複製到您的剪貼簿。
開啟新的瀏覽器索引標籤或視窗,然後輸入 [IP 位址]<>:8080。
如果您正在建置我們的範例應用程式,則 Hello world 會出現在您的瀏覽器中。
管線如何建置
當您完成選取選項,然後繼續驗證並設定管線時,Azure Pipelines 會使用 [部署至 Azure Kubernetes Service] 範本為您建立管線。
建置階段會使用 Docker 工作來建置映像,並將其推送至 Azure Container Registry。
- stage: Build
displayName: Build stage
jobs:
- job: Build
displayName: Build job
pool:
vmImage: $(vmImageName)
steps:
- task: Docker@2
displayName: Build and push an image to container registry
inputs:
command: buildAndPush
repository: $(imageRepository)
dockerfile: $(dockerfilePath)
containerRegistry: $(dockerRegistryServiceConnection)
tags: |
$(tag)
- task: PublishPipelineArtifact@1
inputs:
artifactName: 'manifests'
path: 'manifests'
部署作業會使用 Kubernetes 資訊清單工作來建立 Kubernetes 叢集節點所需的 imagePullSecret
,以從 Azure Container Registry 資源提取。 然後,Kubernetes 資訊清單工作會使用資訊清單檔來部署至 Kubernetes 叢集。 當您使用部署至 Azure Kubernetes Service 範本時,已產生資訊清單檔 service.yml
和 deployment.yml
。
- stage: Deploy
displayName: Deploy stage
dependsOn: Build
jobs:
- deployment: Deploy
displayName: Deploy job
pool:
vmImage: $(vmImageName)
environment: 'myenv.aksnamespace' #customize with your environment
strategy:
runOnce:
deploy:
steps:
- task: DownloadPipelineArtifact@2
inputs:
artifactName: 'manifests'
downloadPath: '$(System.ArtifactsDirectory)/manifests'
- task: KubernetesManifest@1
displayName: Create imagePullSecret
inputs:
action: 'createSecret'
connectionType: 'kubernetesServiceConnection'
kubernetesServiceConnection: 'myapp-default' #customize for your Kubernetes service connection
secretType: 'dockerRegistry'
secretName: '$(imagePullSecret)'
dockerRegistryEndpoint: '$(dockerRegistryServiceConnection)'
- task: KubernetesManifest@1
displayName: Deploy to Kubernetes cluster
inputs:
action: 'deploy'
connectionType: 'kubernetesServiceConnection'
kubernetesServiceConnection: 'myapp-default' #customize for your Kubernetes service connection
manifests: |
$(Pipeline.Workspace)/manifests/deployment.yml
$(Pipeline.Workspace)/manifests/service.yml
containers: '$(containerRegistry)/$(imageRepository):$(tag)'
imagePullSecrets: '$(imagePullSecret)'
清除資源
每當您完成所建立的資源時,都可以使用下列命令來刪除這些資源:
az group delete --name myapp-rg
出現提示時,請輸入 y
。