練習 - 設定您的 Azure DevOps 環境

已完成

在本節中,您會將 Azure DevOps 組織設定為繼續進行本課程模組的其餘部分,並建立 Azure Kubernetes Service (AKS) 環境來部署您的應用程式。

若要達成這些目標,您將:

  • 將使用者新增至您的 Azure DevOps 組織。
  • 設定您的 Azure DevOps 專案。
  • 使用 Azure Boards 管理您的工作流程。
  • 使用 Azure CLI 建立 Azure 資源。
  • 在 Azure Pipelines 中建立管線變數。
  • 建立服務連線以向 Azure 進行驗證。
  • 更新 Kubernetes 部署資訊清單。

將使用者新增至您的組織

若要完成此課程模組,Azure 訂用帳戶是必要的。 您可以免費開始使用 Azure。

雖然不需要使用 Azure DevOps,但必須有 Azure 訂用帳戶,才能透過 Azure DevOps 部署至 Azure 資源。 若要簡化流程,請使用同一 Microsoft 帳戶,登入您的 Azure 訂用帳戶和您的 Azure DevOps 組織。

如果您使用不同的 Microsoft 帳戶登入 Azure 和 Azure DevOps,您仍然可以在與 Azure 訂用帳戶相關聯的 Microsoft 帳戶下,繼續將使用者新增至 DevOps 組織。 如需詳細資訊,請參閱將使用者新增至您的組織或專案。 當您新增使用者時,請選取 [基本] 存取層級。

使用基本存取層級新增使用者之後,登出 Azure DevOps,並使用與您的 Azure 訂用帳戶相關聯的 Microsoft 帳戶重新登入。

取得 Azure DevOps 專案

在本節中,您將執行範本,在 Azure DevOps 中建立專案。

執行範本

執行範本以設定此課程模組的 Azure DevOps 專案:

從 Azure DevOps 示範產生器入口網站中,遵循下列步驟以執行範本:

  1. 選取 [登入],並同意使用規定。

  2. 在 [建立新的專案] 頁面中,選取您的 Azure DevOps 組織,並提供專案名稱,例如 Space Game - web - Kubernetes

    Screenshot of the Azure DevOps Demo Generator showing the process to create the project.

  3. 選取 [是,我要派生此存放庫],然後選取 [授權]。 如果視窗快顯,請授與存取 GitHub 帳戶的權限。

    重要

    若要讓範本連線到您的 GitHub 存放庫,必須選取這個選項。 即使您已經派生 Space Game 存放庫,請選擇它,因為範本將使用您現有的分支。

  4. 選取 [建立專案] 並等候範本完成執行,這可能需要幾分鐘的時間。

  5. 選取 [瀏覽至專案],存取您在 Azure DevOps 中的專案。

重要

此課程模組中的 清除 Azure DevOps 環境 單元包含清除的重要步驟。 建議您執行這些步驟,以避免用盡免費組建分鐘數。 即使您未完成此課程模組,執行清除步驟也很重要。

設定專案的可見度

一開始,GitHub 上 Space Game 存放庫的分支會設定為公用,而 Azure DevOps 範本所建立的專案設為私人。 GitHub 上的公用存放庫可供任何人存取,而私人存放庫只能存取您,以及您選擇與其共用的人員。 同樣地,在 Azure DevOps 上,公用專案會提供非驗證使用者的唯讀存取權,而私人專案則要求使用者獲得存取權,並經過驗證才能存取服務。

目前,為了本課程模組的目的,不需要修改任何這些設定。 不過,對於您的個人專案,您必須判斷您想要授與其他人的可見度和存取權。 例如,如果專案是開放原始碼,則您可以選擇將 GitHub 存放庫和 Azure DevOps 專案設為公用。 如果專案是專屬的,則您通常會將 GitHub 存放庫和 Azure DevOps 專案設為私人。

稍後,您可能會發現下列資源有助於判斷哪一個選項最適合您的專案:

將工作項目移至 [執行中]

在此步驟中,您會在 Azure Boards 上將工作項目指派給自己,並將其移至 [正在進行] 狀態。 在真實情節中,您和小組會在每個短期衝刺 (或工作反覆項目) 開始時建立工作項目。

指派工作項目可讓您檢查清單,並提供其他小組成員查看進度和剩餘工作。 其也可協助強制執行「進行中的工作」(WIP) 限制,以避免小組一次處理太多工作。

  1. 在 Azure DevOps 中,瀏覽至 [Boards],然後從功能表中選取 [Boards]

    Screenshot of Azure DevOps showing the location of the Boards menu.

  2. 選取位於卡片底部的向下箭號,將 [建立與 Kubernetes 協調的網站的多容器版本] 工作項目指派自己。

    Screenshot of Azure Boards showing the location of the down arrow.

  3. 將工作項目從 [待辦事項] 資料行拖放至 [執行中] 資料行。 在本課程模組結束時,您會在完成工作之後,將其移至 [完成] 資料行。

    Screenshot of Azure Boards showing the card in the Doing column.

建立 Azure Kubernetes Service 環境

在此步驟中,您會建立必要的 Azure Kubernetes Service 資源,以部署網站的新容器版本。

在上一個課程模組中,使用 Azure Pipelines 建立發行管線,您已使用 Azure 入口網站來建立 Azure 資源。 雖然入口網站適用於探索 Azure 功能和執行基本工作,但建立 Azure Kubernetes Service 等元件可能是耗時的流程。

在本課程模組中,您會使用 Azure CLI 來建立在 Azure Kubernetes Service 上部署和執行應用程式所需的資源。 可以從終端或透過 Visual Studio Code 存取 Azure CLI。 不過,在此課程模組中,您會從 Azure Cloud Shell 存取 Azure CLI。 Cloud Shell 是裝載於雲端的瀏覽器型命令介面體驗,隨附於 Azure CLI 預先設定,以搭配您的 Azure 訂用帳戶使用。

重要

若要完成本課程模組中的練習,您需要有自己的 Azure 訂用帳戶。

啟動 Cloud Shell

  1. 瀏覽至 Azure 入口網站並登入。

  2. 從功能表中選取 [Cloud Shell] 選項,然後在出現提示時選擇 [Bash]體驗。

    Screenshot of the Azure portal showing the location of the Cloud Shell menu item.

注意

Cloud Shell 需要有 Azure 儲存體資源,才能保存您在 Cloud Shell 中建立的任何檔案。 第一次開啟 Cloud Shell 時,系統會提示您建立資源群組、儲存體帳戶,以及 Azure 檔案儲存體共用。 所有未來的 Cloud Shell 工作階段都會自動使用此設定。

選取 Azure 區域

區域是指位於地理區域中的一或多個 Azure 資料中心。 美國東部、美國西部和北歐等區域是這類區域的範例。 每個 Azure 資源 (包括 App Service 執行個體) 都與一個區域相關聯。

若要簡化命令的執行,請先設定預設區域。 設定預設區域之後,除非明確指定不同的區域,否則後續命令預設會使用該區域。

  1. 從 Cloud Shell 執行下列命令,以列出 Azure 訂閱中可用的區域:

    az account list-locations \
      --query "[].{Name: name, DisplayName: displayName}" \
      --output table
    
  2. 從輸出中接近您地理位置的 [名稱] 資料行中選取 [區域]。 例如,您可以選擇 eastasiawestus2

  3. 執行下列命令來設定您的預設區域。 以您稍早選擇的區域名稱取代 REGION

    az configure --defaults location=<REGION>
    

    此範例會將 westus2 設定為預設區域。

    az configure --defaults location=westus2
    

建立 Bash 變數

使用 Bash 變數可讓設定程序變得更方便,更不易出錯。 此方法可藉由將共用文字字串定義為可在整個指令碼中使用的變數,來協助避免意外錯字。

  1. 從 Cloud Shell 產生亂數,以簡化在下一個步驟中為某些服務建立全域唯一名稱。

    resourceSuffix=$RANDOM
    
  2. 為您的 Azure Container Registry 和 Azure Kubernetes Service 執行個體建立全域唯一名稱。 請注意,這些命令使用雙引號,以指示 Bash 使用內嵌語法來插入變數。

    registryName="tailspinspacegame${resourceSuffix}"
    aksName="tailspinspacegame-${resourceSuffix}"
    
  3. 建立另一個 Bash 變數來儲存資源群組的名稱。

    rgName='tailspin-space-game-rg'
    
  4. 尋找最新的 AKS 版本。

    az aks get-versions
    

    記下最新版本。

建立 Azure 資源

注意

在本教學課程中,預設網路設定用於學習用途。 這些設定可讓您的網站從網際網路存取。 不過,在實務上,您可以選擇設定 Azure 虛擬網路,將您的網站放在非網際網路可路由傳送的網路中,而且只能由您和您的小組存取。 稍後,您可以重新設定網路,讓使用者可以使用網站。

  1. 執行下列命令,使用稍早定義的名稱建立資源群組:

    az group create --name $rgName
    
  2. 執行 az acr create 命令,使用稍早定義的名稱建立 Azure Container Registry:

    az acr create \
      --name $registryName \
      --resource-group $rgName \
      --sku Standard
    
  3. 執行 az aks create 命令,使用稍早定義的名稱建立 AKS 執行個體。 將 <latest-AKS-version> 取代為您稍早記下的版本。

    az aks create \
      --name $aksName \
      --resource-group $rgName \
      --enable-addons monitoring \
      --kubernetes-version <latest-AKS-version> \
      --generate-ssh-keys
    

    注意

    AKS 部署完成可能需要 10-15 分鐘的時間。

  4. 建立變數來儲存針對 AKS 執行個體所設定的服務主體識別碼:

    clientId=$(az aks show \
      --resource-group $rgName \
      --name $aksName \
      --query "identityProfile.kubeletidentity.clientId" \
      --output tsv)
    
  5. 建立變數來儲存 Azure Container Registry 的識別碼:

    acrId=$(az acr show \
      --name $registryName \
      --resource-group $rgName \
      --query "id" \
      --output tsv)
    
  6. 執行 az acr list 命令來擷取您 Azure Container Registry (ACR) 執行個體的登入伺服器 URL:

    az acr list \
     --resource-group $rgName \
     --query "[].{loginServer: loginServer}" \
     --output table
    

    請務必記下容器登錄的登入伺服器。 稍後在設定管線時,您將需要此資訊。 以下為範例:

    LoginServer                      
    --------------------------------
    tailspinspacegame4692.azurecr.io
    
  7. 執行 az role assignment create 命令來建立角色指派,以授權 AKS 叢集連線到 Azure Container Registry:

    az role assignment create \
      --assignee $clientId \
      --role AcrPull \
      --scope $acrId
    

重要

此課程模組中的 清除 Azure DevOps 環境 單元包含清除的重要步驟。 建議您執行這些步驟,以避免用盡免費組建分鐘數。 即使您未完成此課程模組,執行清除步驟也很重要。

建立變數群組

在本節中,您會將變數新增至管線,以儲存 Azure Container Registry 的名稱。 建議將 Azure Container Registry 執行個體的名稱定義為管線設定中的變數,而不是寫入程式碼。 這可讓您的設定更容易重複使用,而且如果您的執行個體名稱變更,您可以輕鬆地更新變數並觸發管線,而不需要修改您的設定。

  1. 登入您的 Azure DevOps 組織,然後瀏覽至您的專案。

  2. 選取 [管線],然後從左側瀏覽窗格中選取 [程式庫]

    Screenshot of Azure Pipelines showing the Library menu option.

  3. 選取 [變數群組],然後選取 [+ 變數群組] 以新增變數群組。

  4. 在 [屬性] 中,輸入 Release 作為變數群組名稱。

  5. 在 [變數] 區段下,選取 [新增]

  6. 輸入RegistryName 作為變數名稱,針對值輸入 Azure Container Registry 的登入伺服器,例如tailspinspacegame4692.azurecr.io

  7. 在頁面頂端,選取 [儲存],以儲存您的管線變數。 這是變數群組的範例

    Screenshot of Azure Pipeline showing the variable group. The group contains one variable.

建立服務連線

下一個步驟會建立可讓 Azure Pipelines 存取 Azure Container Registry 和 Azure Kubernetes Service 執行個體的服務連線。 透過建立這些服務連線,Azure Pipelines 可以推送您的容器,以及指示您的 AKS 叢集將其提取,以更新已部署的服務。

重要

請確定您已使用相同的 Microsoft 帳戶登入 Azure 入口網站和 Azure DevOps。

建立 Docker 登錄服務連線

  1. 登入您的 Azure DevOps 組織,然後瀏覽至您的專案。

  2. 從頁面底部的角落選取 [專案設定]。

  3. 選取 [管線] 區段底下的 [服務連線]

  4. 選取 [新增服務連線],選取 [Docker Registry],然後選取 [下一步]

  5. 在頁面頂端附近,選取 [Azure Container Registry],然後選取 [服務主體] 進行驗證類型。

  6. 為每個設定輸入下列值。

    設定
    訂用帳戶 您的 Azure 訂用帳戶
    Azure Container Registry 選取稍早建立的登錄
    服務連線名稱 容器登錄連線
  7. 確定已選取 [為所有管線授與存取權限] 核取方塊。

  8. 當完成時,選擇儲存

建立 ARM 服務連線

現在,您將建立 Azure Resource Manager 服務連線,以向 AKS 叢集進行驗證。 我們使用 ARM 服務連線,而不是 Kubernetes,因為 Kubernetes 1.24 之後,預設不會再建立長期權杖。 如需詳細資訊,請參閱此 DevOps 部落格文章:使用 Kubernetes 工作的 AKS 客戶服務連線指引

  1. 依序選取 [新增服務連線]、[Azure Resource Manager] 和 [下一步]

  2. 選取 [服務主體 (自動)],然後選取 [下一步]

  3. 針對範圍層級選取 [訂用帳戶]

  4. 針對每個設定輸入下列值。

    設定
    訂用帳戶 您的 Azure 訂用帳戶
    資源群組 選取稍早建立的登錄
    服務連線名稱 Kubernetes 叢集連線
  5. 確定已選取 [為所有管線授與存取權限] 核取方塊。

  6. 當完成時,選擇儲存

建立管道環境

  1. 選取 [管線],然後選取 [環境]

    Screenshot of Azure Pipelines showing the Environments menu option.

  2. 選取 [建立環境] 以建立新的環境。

  3. 在 [名稱] 欄位中,輸入 Dev

  4. 從 [資源]區段中選取 [無],然後選取 [建立] 以建立管線環境。

更新 Kubernetes 部署資訊清單

在本節中,您將更新 Kubernetes 資訊清單 deployment.yml ,以指向您稍早建立的容器登錄。

  1. 瀏覽至您的 GitHub 帳戶,然後選取您為此課程模組派生的存放庫:mslearn-tailspin-spacegame-web-kubernetes

  2. 在編輯模式中開啟 manifests/deployment.yml 檔案。

    Screenshot of GitHub showing the location of the edit mode icon.

  3. 變更容器映像參考以使用您的 ACR 登入伺服器。 下列資訊清單使用 tailspinspacegame2439.azurecr.io 作為範例。

    apiVersion : apps/v1
    kind: Deployment
    metadata:
      name: web
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: web
      template:
        metadata:
          labels:
            app: web
        spec:
          containers:
            - name: web
              image: tailspinspacegame4692.azurecr.io/web
              ports:
              - containerPort: 80
    
    apiVersion : apps/v1
    kind: Deployment
    metadata:
      name: leaderboard
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: leaderboard
      template:
        metadata:
          labels:
            app: leaderboard
        spec:
          containers:
            - name: leaderboard
              image: tailspinspacegame4692.azurecr.io/leaderboard
              ports:
              - containerPort: 80
    
  4. 認可對 main 分支所做的變更。