分享方式:


使用 Azure Pipelines 建置容器映像並將其推送至登錄

Azure DevOps Services |Azure DevOps Server 2022 |Azure DevOps Server 2020

本文會引導您完成使用 Azure Pipelines 來建置 Docker 映射並將其推送至 Azure Container Registry、Docker Hub 和 Google Artifact Registry 的設定和設定。 此外,它會詳細說明 System.AccessToken 管線內用於安全驗證的 。

本文會引導您完成使用 Azure Pipelines 來建置 Docker 映射並將其推送至 Docker Hub 和 Google Artifact Registry 的設定和設定。 此外,它會詳細說明 System.AccessToken 管線內用於安全驗證的 。

您將瞭解如何建立 YAML 管線,以建置 Docker 映射並將其推送至容器登錄。 Docker@2工作可用來建置映射,並將映像推送至容器登錄。

必要條件

  • Azure DevOps 專案。
  • 容器登錄(Docker Hub、Google Artifact Registry 或 Azure Container Registry)。
  • 具有 Dockerfile 的 GitHub 存放庫。 如果您沒有範例存放庫,您可以使用 範例存放庫 在瀏覽器中,移至範例存放庫 ,然後將它分支至您的 GitHub 帳戶。
  • Docker。 如果使用自我裝載代理程式,請確定已安裝 Docker,並使用提升的許可權執行 Docker 引擎。 Microsoft裝載的代理程式已預安裝 Docker。
  • Azure DevOps 專案。
  • 容器登錄(Docker Hub 或 Google Artifact Registry)。
  • 具有 Dockerfile 的 GitHub 存放庫。 如果您沒有範例存放庫,您可以使用 範例存放庫 在瀏覽器中,移至範例存放庫 ,然後將它分支至您的 GitHub 帳戶。
  • Docker。 如果使用自我裝載代理程式,請確定已安裝 Docker,並使用提升的許可權執行 Docker 引擎。 Microsoft裝載的代理程式已預安裝 Docker。

建立 Docker 服務連線

將容器映像推送至登錄之前,您必須在 Azure DevOps 中建立服務連線。 此服務聯機會儲存使用容器登錄安全地進行驗證所需的認證。 移至 Azure DevOps 專案中的 [服務連線 ] 頁面,以建立新的服務連線,然後選取 Docker 登錄 連線類型。

有不同的程式可建立 Docker Hub 和 Google Artifact Registry 的服務連線。

選擇 [Docker 登錄服務連線] 底下的 [Docker Hub] 選項,並提供您的使用者名稱和密碼來建立 Docker 服務連線。

建立 Azure Pipeline 以建置和推送 Docker 映射

Docker@2工作旨在簡化在 Azure Pipelines 內建置、推送和管理 Docker 映射的程式。 此工作支持各種不同的 Docker 命令,包括建置、推送、登入、註銷、啟動、停止及執行。

下列步驟概述如何建立 YAML 管線,以使用Docker@2工作來建置和推送映射。

  1. 流覽至您的 Azure DevOps 專案,然後從左側功能表中選取 [管線 ]。

  2. 選取 [新增管線 ] 以建立新的管線。

  3. 選取 [GitHub ] 或 [GitHub Enterprise Server ] 作為原始程式碼的位置。

  4. 如果您尚未授權 Azure Pipelines 連線到您的 GitHub Enterprise Server 帳戶。

    1. 選取 [ 連線到 GitHub Enterprise Server]。
    2. 輸入您的帳戶詳細數據,然後選取 [ 驗證並儲存]。
  5. 選取您的存放庫。 如果您已重新導向至 GitHub

  6. 選取 [入門管線] 範本以建立基本管線組態。

  7. 使用下列程式代碼取代azure-pipelines.yml的內容

  8. 根據您要部署 Linux 或 Windows 應用程式,請務必分別設定 vmImageubuntu-latestwindows-latest。 如果您使用自我裝載代理程式,請將 設定 vmImage 為包含具有 Docker 功能的自我裝載代理程式集區名稱。 您可以新增 demands: docker 屬性,以確保已選取已安裝 Docker 的代理程式。

  9. 將取代 <docker connection> 為您稍早建立的 Docker 服務連線名稱。

  10. 將取代 <target repository name> 為您要推送映像之容器登錄中的存放庫名稱。 例如: <your-docker-hub-username>/<repository-name>

    
     trigger:
     - main
    
     pool:
     vmImage: 'ubuntu-latest' 
    
     variables:
     repositoryName: '<target repository name>'
    
     steps:
     - task: Docker@2
     inputs:
     containerRegistry: '<docker connection>'
     repository: $(repositoryName)
     command: 'buildAndPush'
     Dockerfile: '**/Dockerfile'
    
    
  11. 完成時,請選取 [ 儲存並執行]。

  12. 當您將 azure-pipelines.yml 檔案儲存至存放庫時,系統會提示您新增認可訊息。 輸入訊息,然後選取 [ 儲存並執行]。

使用自我裝載代理程式時,請確定 Docker 已安裝在代理程式的主機上,且 Docker 引擎/精靈是以更高的許可權執行。

若要建置映像,Docker 必須安裝在代理程式的主機上,而且 Docker 引擎/精靈必須以更高的許可權執行。 使用下列步驟,使用 YAML 管線編輯器建立管線。

  1. 移至您的集合並建立專案。

  2. 在您的專案中,選取 [ 管線]。

  3. 選取建立管線

  4. 選取 [GitHub Enterprise Server ] 作為原始程式碼的位置。

  5. 如果您尚未授權 Azure Pipelines 連線到您的 GitHub Enterprise Server 帳戶。

    1. 選取 [ 連線到 GitHub Enterprise Server]。
    2. 輸入您的帳戶詳細數據,然後選取 [ 驗證並儲存]。
  6. 選取您的存放庫。 如果您重新導向至 GitHub 以安裝 Azure Pipelines 應用程式,請選取 [ 核准並安裝]。

  7. 若要設定管線,請選取 [ 建置 Docker 映像 範本]。

  8. 在 YAML 管線編輯器中,以下列程式代碼取代 YAML 檔案的內容。 將集區名稱取代為包含您自我裝載代理程式的集區名稱與 Docker 功能。

  9. 根據您要部署 Linux 或 Windows 應用程式,請務必分別設定 vmImageubuntu-latestwindows-latest

  10. 將取代 <target repository name> 為您要推送映像之容器登錄中的存放庫名稱。 例如: <your-docker-hub-username>/<repository-name>

  11. 將取代 <docker connection> 為您稍早建立的 Docker 服務連線名稱。

    
    trigger:
    - main
    
    pool:
    name: default
    demands: docker
    
    variables:
    repositoryName: '<target repository name>'
    
    steps:
    - task: Docker@2
    inputs:
    containerRegistry: '<docker connection>'
    repository: $(repositoryName)
    command: 'buildAndPush'
    Dockerfile: '**/Dockerfile'
    
    
  12. 選取儲存並執行

  13. 在 [ 儲存並執行 ] 頁面上,選取 [ 儲存並再次執行 ]。

您可以監看管線執行並檢視記錄,以查看正在建置並推送至容器登錄的 Docker 映射。

在 Docker@2 工作中使用 System.AccessToken 進行驗證

您可以使用 Azure DevOps 所提供的 來向容器登錄 System.AccessToken 進行驗證。 此令牌可讓您安全地存取管線內的資源,而不需要公開敏感性認證。

下列 YAML 管線範例會使用 Docker@2 工作來登入容器登錄,並推送 Docker 映射。 會 System.AccessToken 設定為環境變數,以驗證 Docker 命令。

將取代 <docker connection> 為您的 Docker 登錄服務連線名稱。 將取代 <your repository> 為您的 Docker 存放庫名稱。

trigger:
- main

pool:
  vmImage: 'ubuntu-latest'

variables:
  SYSTEM_ACCESSTOKEN: $(System.AccessToken)

steps:
- task: Docker@2
  inputs:
    command: login
    containerRegistry: '<docker connection>'
  env:
    SYSTEM_ACCESSTOKEN: $(System.AccessToken)

- task: Docker@2
  inputs:
    command: buildAndPush
    repository: '<your repository>'
    dockerfile: '**/Dockerfile'
    tags: |
      $(Build.BuildId)
  env:
    SYSTEM_ACCESSTOKEN: $(System.AccessToken)