共用方式為


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

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

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

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

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

必要條件

產品 需求
Azure DevOps - Azure DevOps 專案
- 許可權:
    - 若要授與專案中所有管線的存取權:您必須是 Project Administrators 群組的成員,
    - 若要建立服務連線:您必須具有 管理員建立者 角色以進行 服務連線
- 如果您使用自我裝載的代理程式,請確定已安裝 Docker,並使用更高的許可權執行 Docker 引擎。 Microsoft裝載的代理程式已預安裝 Docker。
GitHub - GitHub 帳戶。
- 含有 Dockerfile 的 GitHub 資源庫。 如果您沒有自己的專案,請使用 範例存放庫
- 一個用於授權 Azure Pipelines 的 GitHub 服務連線
天藍色 - Azure 訂用帳戶
- Azure Container Registry
Docker Hub (英文) - Docker Hub 帳戶。
- Docker Hub 映像存放庫。
  • 專案需求:Azure DevOps 專案
  • 許可權:
  • 訂用帳戶:
    • GitHub 帳戶。 如果您沒有帳戶,您可以在 gitHub 免費建立一個。
    • Docker Hub 帳戶:您需要 Docker Hub 帳戶。 如果您沒有帳戶,您可以在 Docker Hub免費建立一個。
  • 存放庫: 含有 Dockerfile 的 GitHub 存放庫。 如果您沒有範例存放庫,您可以使用 範例存放庫
  • 服務連線: GitHub 企業伺服器服務連線。 如果您沒有帳戶,您可以在 Azure DevOps 項目設定中建立一個。 如需建立服務連線的詳細資訊,請參閱服務連線。
  • 容器登錄: A (Docker Hub 容器登錄
  • 軟體需求:必須安裝 Docker 並確保 Docker 引擎以較高許可權在自行裝載代理程式上執行。

建立 Docker 服務連線

將容器映像推送至登錄之前,您必須在 Azure DevOps 中建立服務連線。 此服務聯機會儲存使用容器登錄安全地進行驗證所需的認證。 前往 Azure DevOps 專案設定中的 服務連線 來建立新的 Docker Registry 服務連線。

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

建立 YAML 管線以建置和推送 Docker 映射

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

使用下列步驟建立 YAML 流程,以使用 Docker@2 工作來建置和推送映像檔。

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

  2. 選擇「新增管線」

  3. 選取來源存放庫的位置。

  4. 選取 [GitHub 作為原始程式碼的位置,然後選取您的存放庫。

    • 如果您重新導向至 GitHub 以登入,請輸入您的 GitHub 認證。
    • 如果您重新導向至 GitHub 以安裝 Azure Pipelines 應用程式,請選取 [ 核准並安裝]。
  5. 選取 [入門管線] 範本以建立基本管線組態。

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

    
     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'
    
    
  7. 編輯管線 YAML 檔案,如下所示:

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

      如果您使用自我裝載代理程式,請將 設定 vmImage 為包含具有 Docker 功能的自我裝載代理程式集區名稱。 您可以新增 demands: 屬性,以確保已選取已安裝 Docker 的代理程式。 例如:

          pool:
            name: <your agent pool>
            demands: docker
      
    • 將取代 <docker connection> 為您稍早建立的 Docker 服務連線名稱。

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

  8. 完成時,請選取 [ 儲存並執行]。

  9. 當您將 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 檔案的內容:

    
    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'
    
    
  9. 編輯管線 YAML 檔案,如下所示:

    • 將集區名稱取代為包含您自我裝載代理程式的集區名稱與 Docker 功能。
    • 將取代 <target repository name> 為您要推送映像之容器登錄中的存放庫名稱。 例如: <your-docker-hub-username>/<repository-name>
    • 將取代 <docker connection> 為您稍早建立的 Docker 服務連線名稱。
  10. 選取儲存並執行

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

您可以監看管線執行並檢視記錄,以查看正在建置並推送至容器登錄的 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)