使用 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 專案。
-
許可權:
- 成為 Project Administrators 群組的成員,。
- 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 工作來建置和推送映像檔。
移至您的 Azure DevOps 專案,然後從左側功能表中選取 [Pipelines]。
選擇「新增管線」。
選取來源存放庫的位置。
選取 [GitHub 作為原始程式碼的位置,然後選取您的存放庫。
- 如果您重新導向至 GitHub 以登入,請輸入您的 GitHub 認證。
- 如果您重新導向至 GitHub 以安裝 Azure Pipelines 應用程式,請選取 [ 核准並安裝]。
選取 [入門管線] 範本以建立基本管線組態。
使用下列程式代碼取代 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'
編輯管線 YAML 檔案,如下所示:
根據您要部署 Linux 或 Windows 應用程式,請務必分別設定
vmImage
為ubuntu-latest
或windows-latest
。如果您使用自我裝載代理程式,請將 設定
vmImage
為包含具有 Docker 功能的自我裝載代理程式集區名稱。 您可以新增demands:
屬性,以確保已選取已安裝 Docker 的代理程式。 例如:pool: name: <your agent pool> demands: docker
將取代
<docker connection>
為您稍早建立的 Docker 服務連線名稱。將取代
<target repository name>
為您要推送映像之容器登錄中的存放庫名稱。 例如:<your-docker-hub-username>/<repository-name>
。
完成時,請選取 [ 儲存並執行]。
當您將 azure-pipelines.yml 檔案儲存至存放庫時,系統會提示您新增認可訊息。 輸入訊息,然後選取 [ 儲存並執行]。
使用自我裝載代理程式時,請確定 Docker 已安裝在代理程式的主機上,且 Docker 引擎/精靈是以更高的許可權執行。
若要建置映像,Docker 必須安裝在代理程式的主機上,而且 Docker 引擎/精靈必須以更高的許可權執行。
使用下列步驟,使用 YAML 管線編輯器建立管線。
移至您的集合並建立專案。
在您的專案中,選取 [ 管線]。
選取建立管線。
選取 [GitHub Enterprise Server ] 作為原始程式碼的位置。
如果您尚未授權 Azure Pipelines 連線到您的 GitHub Enterprise Server 帳戶。
- 選取 [ 連線到 GitHub Enterprise Server]。
- 輸入您的帳戶詳細數據,然後選取 [ 驗證並儲存]。
選取您的存放庫。 如果您重新導向至 GitHub 以安裝 Azure Pipelines 應用程式,請選取 [ 核准並安裝]。
若要設定管線,請選取 [ 建置 Docker 映像 範本]。
在 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'
編輯管線 YAML 檔案,如下所示:
- 將集區名稱取代為包含您自我裝載代理程式的集區名稱與 Docker 功能。
- 將取代
<target repository name>
為您要推送映像之容器登錄中的存放庫名稱。 例如:<your-docker-hub-username>/<repository-name>
。 - 將取代
<docker connection>
為您稍早建立的 Docker 服務連線名稱。
選取儲存並執行。
在 [ 儲存並執行 ] 頁面上,選取 [ 儲存並再次執行 ]。
您可以監看管線執行並檢視記錄,以查看正在建置並推送至容器登錄的 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)