使用 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 帳戶,請建立免費的 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 資訊清單工作 來建立 imagePullSecret
Kubernetes 叢集節點從 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@0
displayName: Create imagePullSecret
inputs:
action: createSecret
secretName: $(imagePullSecret)
namespace: $(k8sNamespace)
dockerRegistryEndpoint: $(dockerRegistryServiceConnection)
- task: KubernetesManifest@0
displayName: Deploy to Kubernetes cluster
inputs:
action: deploy
namespace: $(k8sNamespace)
manifests: |
$(System.ArtifactsDirectory)/manifests/deployment.yml
$(System.ArtifactsDirectory)/manifests/service.yml
imagePullSecrets: |
$(imagePullSecret)
containers: |
$(containerRegistry)/$(imageRepository):$(tag)
清除資源
只要使用您所建立的資源完成,您可以使用下列命令來刪除它們:
az group delete --name myapp-rg
出現提示時,請輸入 y
。
Azure DevOps Services |Azure DevOps Server 2020 |Azure DevOps Server 2019
使用 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 帳戶,請建立免費的 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 Kubernetes Service (AKS) 使用 Azure Container Registry (ACR)時,您必須建立驗證機制。 這可以透過兩種方式達成:
授與 AKS 對 ACR 的存取權。 請參閱 從 Azure Kubernetes Service 向 Azure Container Registry 進行驗證。
使用 Kubernetes 映射提取秘密 。 您可以使用 Kubernetes 部署工作 來建立 映射提取密碼。
建立發行管線
用來設定 CI 的組建管線已建置 Docker 映射,並將其推送至 Azure Container Registry。 它也封裝併發布 Helm 圖表作為成品。 在發行管線中,我們會將容器映射部署為 Helm 應用程式至 AKS 叢集。
在 Azure Pipelines 中 ,開啟組建的摘要。
在組建摘要中 ,選擇 [發行 ] 圖示以啟動新的發行管線。
如果您先前已建立使用這些組建成品的發行管線,系統會提示您改為建立新版本。 在此情況下,請移至 [ 發行] 頁面,然後選擇圖示,從該處 + 開始新的發行管線。
選取空白 作業 範本。
開啟 [ 工作] 頁面,然後選取 [代理程式作業 ]。
選擇 + 新增工作並新增 Helm 工具安裝程式 工作。 這可確保執行後續工作的代理程式已安裝 Helm 和 Kubectl。
再次選擇 + 並新增套件 並部署 Helm 圖表 工作。 設定此工作的設定,如下所示:
連線類型 :選取 [Azure Resource Manager ] 以使用 Azure 服務連線連線至 AKS 叢集。 或者,如果您想要使用 kubeconfig 或服務帳戶連線到任何 Kubernetes 叢集,您可以選取 [Kubernetes Service 連線ion ]。 在此情況下,您必須建立並選取 Kubernetes 服務連線,而不是下列設定的 Azure 訂用帳戶。
Azure 訂 用帳戶:從 [可用的 Azure 服務] 連線ions 底下 選取連線,或建立更受限的許可權連線至您的 Azure 訂用帳戶。 如果您在輸入旁邊看到 [授權] 按鈕,請使用它來授權 Azure 訂用帳戶的連線。 如果您在訂用帳戶清單中看不到必要的 Azure 訂用帳戶,請參閱 建立 Azure 服務連線 以手動設定連線。
資源群組 :輸入或選取包含 AKS 叢集的資源群組。
Kubernetes 叢集 :輸入或選取您所建立的 AKS 叢集。
命令 :選取 init 作為 Helm 命令。 這會將 Tiller 安裝到您執行中的 Kubernetes 叢集。 它也會設定任何必要的本機設定。 刻度 使用 Canary 映射版本 來安裝 Tiller 的最新發行前版本。 如果已透過勾選 升級 Tiller 來預先安裝 Tiller,您也可以選擇升級 Tiller 。 如果啟用這些選項,工作就會執行
helm init --canary-image --upgrade
選擇 + [ 代理程式] 作業 ,然後新增另一個 套件並部署 Helm 圖表 工作。 設定此工作的設定,如下所示:
Kubernetes 叢集 :輸入或選取您所建立的 AKS 叢集。
命名空間 :輸入您想要部署應用程式的 Kubernetes 叢集命名空間。 Kubernetes 支援相同實體叢集支援的多個虛擬叢集。 這些虛擬叢集稱為 命名空間 。 您可以使用命名空間在相同的叢集中建立不同的環境,例如開發、測試和預備環境。
命令 :選取 [升級 ] 作為 Helm 命令。 您可以使用此工作執行任何 Helm 命令,並以引數的形式傳入命令選項。 當您選取 升級 時,工作會顯示一些更多欄位:
圖表類型 :選取 [檔案路徑 ]。 或者,如果您想要指定 URL 或圖表名稱,則可以指定 圖表 名稱。 例如,如果圖表名稱為
stable/mysql
,工作就會執行helm upgrade stable/mysql
圖表路徑 :這可以是已封裝圖表的路徑或未封裝圖表目錄的路徑。 在此範例中,您會使用 CI 組建發佈圖表,因此請使用檔案選擇器或輸入來選取檔案套件
$(System.DefaultWorkingDirectory)/**/*.tgz
版本名稱 :輸入發行的名稱;例如
azuredevops
重新建立 Pod :如果發行期間有設定變更,而且您想要以新的設定取代執行中的 Pod,請勾選此核取方塊。
重設值 :如果您想要圖表內建的值覆寫工作提供的所有值,請勾選此核取方塊。
強制 :如果發生衝突,請勾選此核取方塊,您想要升級和復原以刪除、重新建立資源,然後重新安裝完整版本。 這在套用修補程式可能會失敗的案例中很有用(例如,因為叢集 IP 位址不可變的服務)。
引數:輸入 Helm 命令引數及其值;在此範例中
--set image.repository=$(imageRepoName) --set image.tag=$(Build.BuildId)
如需為何使用這些引數的說明,請參閱 本節 。啟用 TLS :勾選此核取方塊,以啟用 Helm 與 Tiller 之間的強式 TLS 型連線。
CA 憑證 :指定要上傳的 CA 憑證,並用來發行 Tiller 和 Helm 用戶端的憑證。
憑證 :指定 Tiller 憑證或 Helm 用戶端憑證
索引 鍵:指定 Tiller 金鑰或 Helm 用戶端金鑰
在管線的 [ 變數 ] 頁面中,新增名為 imageRepoName 的變數,並將值設定為 Helm 映射存放庫的名稱。 一般而言,這是格式
example.azurecr.io/coderepository
儲存發行管線。
Helm 升級工作中所使用的引數
在建置管線中,容器映射會加上 $(Build.BuildId)
標記,而且這會推送至 Azure Container Registry。
在 Helm 圖表中,您可以將容器映射詳細資料參數化,例如名稱和標記,因為相同的圖表可用來部署到不同的環境。
您也可以在 values.yaml 檔案中指定這些值,或由使用者提供的值檔案覆寫,而這個檔案可以在 Helm 安裝或升級期間由 --set
參數覆寫。
在此範例中,我們會傳遞下列引數:
--set image.repository=$(imageRepoName) --set image.tag=$(Build.BuildId)
的值 $(imageRepoName)
是在 [變數 ] 頁面中設定 的 (或 YAML 檔案的 variables 區 段)。
或者,您也可以將它直接取代為引數值或 values.yaml 檔案中的 --set
映射存放庫名稱。
例如:
image:
repository: VALUE_TO_BE_OVERRIDDEN
tag: latest
另一個替代方法是設定工作的 [ 設定值] 選項,將引數值指定為逗號分隔索引鍵/值組。
建立發行以部署您的應用程式
您現在已準備好建立發行,這表示使用特定組建所產生的成品開始執行發行管線的程式。 這會導致部署組建:
選擇 [+ 發行 ],然後選取 [ 建立發行 ]。
在 [ 建立新的發行 ] 面板中,檢查您要使用的成品版本是否已選取,然後選擇 [ 建立 ]。
選擇資訊列訊息中的發行連結。 例如:「已建立 Release-1 」。
在管線檢視中,選擇管線階段的狀態連結,以查看記錄和代理程式輸出。