共用方式為


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

Azure DevOps 服務

本文將引導你建立管線,將 Docker 映像檔建置並推送到 Azure 容器登錄檔或 Docker Hub。 完成這個教學後,你會有一個運作中的 CI/CD 管線,能自動建立你的 Docker 映像檔並推送到你選擇的容器登錄檔。

必要條件

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

建立 Docker 登錄服務連線

在你將容器映像推送到登錄檔之前,先在 Azure DevOps 建立服務連線。 此服務連線儲存與 Azure 容器登錄檔安全驗證所需的憑證。 如需詳細資訊,請參閱 Docker 註冊表服務連線

  1. 在 Azure DevOps 專案中,選取 [項目設定],>[服務連線]

    截圖顯示如何在 Azure DevOps 中導航到專案設定和服務連線。

  2. 選取 [新增服務連線][Docker 登錄]

    截圖顯示新服務連線選單,並選擇了 Docker 登錄檔選項。

  3. 選取 [Docker Hub,然後輸入下列資訊:

    領域 描述
    Docker 識別碼 輸入您的 Docker 識別碼。
    Docker 密碼 輸入您的 Docker 密碼。
    服務連線名稱 輸入服務連線的名稱。
    授予所有管線的存取許可權 選取此選項可授與所有管線的存取權。

    Docker Hub 服務連線對話框的截圖,顯示 Docker ID、密碼和服務連線名稱欄位。

  4. 選擇 驗證並儲存

建立管線以建置和推送 Docker 映像

Docker@2 工作用來建置映像,並將映像推送至容器註冊表。 Docker@2任務簡化了在 Azure Pipelines 中建置、推送及管理 Docker 映像的流程。 此任務支援多種 Docker 指令,包括 buildpushloginlogoutstartstoprun和 。

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

  1. 在你的 Azure DevOps 專案中,選擇 PipelinesNew pipeline

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

    • 如果您重新導向至 GitHub 以登入,請輸入您的 GitHub 認證。
    • 如果您重新導向至 GitHub 以安裝 Azure Pipelines 應用程式,請選取 [ 核准並安裝]。
  3. 選取您的存放庫。

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

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

    
    trigger:
    - main
    
    pool:
      vmImage: 'ubuntu-latest' 
    
    variables:
      # Replace with the name of your target Docker Hub or Azure Container Registry repository
      repositoryName: '<image-repository-name>' 
    
    steps:
    - task: Docker@2
      inputs:
        # Replace with the service connection name created in previous steps
        containerRegistry: '<docker-registry-service-connection-name>'
        repository: $(repositoryName)
        command: 'buildAndPush'
        Dockerfile: '**/Dockerfile'
    
    
  6. 編輯管線 YAML 檔案,如下所示:

    • 請將 <target repository name> 替換為您要推送映像檔到容器登錄之存放庫名稱。
    • 以您稍早建立的 Docker 登錄服務連線名稱取代 <docker registry service connection>
  7. 完成時,請選擇 [儲存並執行>儲存並執行

  8. 選擇 [作業] 來檢視日誌,並確認流程已成功執行。

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

  2. 選擇「新增管線」

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

    • 如果您重新導向至 GitHub 以登入,請輸入您的 GitHub 認證。
    • 如果您重新導向至 GitHub 以安裝 Azure Pipelines 應用程式,請選取 [ 核准並安裝]。
  4. 選取 Docker - 建置並且將映像推送至 Azure Container Registry 範本。

  5. 選取您的 Azure 訂用帳戶,繼續

  6. 選擇你的容器登錄檔,然後選擇 驗證與設定

    範例 YAML 管線:

    # Docker
    # Build and push an image to Azure Container Registry
    # https://docs.microsoft.com/azure/devops/pipelines/languages/docker
    
    trigger:
    - main
    
    resources:
    - repo: self
    
    variables:
      # Container registry service connection established during pipeline creation
      dockerRegistryServiceConnection: '<docker-registry-service-connection-id>'
      imageRepository: '<image-repository-name>'
      containerRegistry: '<container-registry-name>.azurecr.io'
      dockerfilePath: '$(Build.SourcesDirectory)/app/Dockerfile'
      tag: '$(Build.BuildId)'
    
      # Agent VM image name
      vmImageName: 'ubuntu-latest'
    
    stages:
    - stage: Build
      displayName: Build and push stage
      jobs:
      - job: Build
        displayName: Build
        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)
    
    
  7. 選取 [儲存並執行],然後再次選取 [儲存並執行]

  8. 選擇 [作業] 來檢視日誌,並確認流程已成功執行。

Docker 範本會建立服務連線到你的 Azure 容器登錄檔,並利用 Docker@2 任務 來建立並將 Docker 映像推送到登錄檔。

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

使用自架代理時,請確保 Docker 已安裝在代理主機上,且 Docker 引擎/守護程序以管理員權限執行。