使用 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 DevOps Server 不支援將 Docker 映射推送至 Azure Container Registry。
若要建立與 Google Artifact Registry 相關聯的 Docker 服務連線:
在 Google Cloud Platform (GCP) 控制台中開啟您的專案,然後開啟 Cloud Shell
若要節省時間,請輸入您的項目識別碼和計算引擎區域選項,請執行下列命令來設定預設組態值:
gcloud config set project [PROJECT_NAME]
gcloud config set compute/zone [ZONE]
[PROJECT_NAME]
取代為 GCP 項目名稱,並以您要用來建立資源的區域名稱取代 [ZONE]
。 如果您不確定要挑選哪個區域,請使用 us-central1-a
。 例如:
gcloud config set project azure-pipelines-test-project-12345
gcloud config set compute/zone us-central1-a
為您的項目啟用成品登錄 API:
gcloud services enable artifactregistry.googleapis.com
gcloud services enable containerregistry.googleapis.com
建立 Azure Pipelines 的服務帳戶以發佈 Docker 映射:
gcloud iam service-accounts create azure-pipelines-publisher --display-name "Azure Pipelines Publisher"
將記憶體系統管理員身分識別和存取管理 (IAM) 角色指派給服務帳戶:
PROJECT_NUMBER=$(gcloud projects describe \
$(gcloud config get-value core/project) \
--format='value(projectNumber)')
AZURE_PIPELINES_PUBLISHER=$(gcloud iam service-accounts list \
--filter="displayName:Azure Pipelines Publisher" \
--format='value(email)')
gcloud projects add-iam-policy-binding \
$(gcloud config get-value core/project) \
--member serviceAccount:$AZURE_PIPELINES_PUBLISHER \
--role roles/storage.admin
產生服務帳戶金鑰:
gcloud iam service-accounts keys create \
azure-pipelines-publisher.json --iam-account $AZURE_PIPELINES_PUBLISHER
tr -d '\n' < azure-pipelines-publisher.json > azure-pipelines-publisher-oneline.json
點選 Cloud Shell 右上角的按鈕來啟動程式代碼編輯器:
開啟 named azure-pipelines-publisher-oneline.json
檔案。 您需要下列其中一個步驟中此檔案的內容:
在您的 Azure DevOps 組織中,選取 [項目設定 ],然後選取 [ 管線 -> 服務連線]。
選取 [新增服務連線 ],然後選擇 [Docker 登錄]
在對話框中,輸入下列欄位的值:
- Docker 登錄:
https://gcr.io/[PROJECT-ID]
,其中 [PROJECT-ID]
是 GCP 項目的名稱。
- Docker 識別碼:
_json_key
- Docker 密碼: 貼上 的內容
azure-pipelines-publisher-oneline.json
- 服務連線名稱:
gcrServiceConnection
選取 [ 儲存 ] 以建立服務連線
建立 Azure Pipeline 以建置和推送 Docker 映射
Docker@2工作旨在簡化在 Azure Pipelines 內建置、推送和管理 Docker 映射的程式。 此工作支持各種不同的 Docker 命令,包括建置、推送、登入、註銷、啟動、停止及執行。
下列步驟概述如何建立 YAML 管線,以使用Docker@2工作來建置和推送映射。
流覽至您的 Azure DevOps 專案,然後從左側功能表中選取 [管線 ]。
選取 [新增管線 ] 以建立新的管線。
選取 [GitHub ] 或 [GitHub Enterprise Server ] 作為原始程式碼的位置。
如果您尚未授權 Azure Pipelines 連線到您的 GitHub Enterprise Server 帳戶。
- 選取 [ 連線到 GitHub Enterprise Server]。
- 輸入您的帳戶詳細數據,然後選取 [ 驗證並儲存]。
選取您的存放庫。
如果您已重新導向至 GitHub
選取 [入門管線] 範本以建立基本管線組態。
使用下列程式代碼取代azure-pipelines.yml的內容。
根據您要部署 Linux 或 Windows 應用程式,請務必分別設定 vmImage
為 ubuntu-latest
或 windows-latest
。 如果您使用自我裝載代理程式,請將 設定 vmImage
為包含具有 Docker 功能的自我裝載代理程式集區名稱。 您可以新增 demands: docker
屬性,以確保已選取已安裝 Docker 的代理程式。
將取代 <docker connection>
為您稍早建立的 Docker 服務連線名稱。
將取代 <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'
完成時,請選取 [ 儲存並執行]。
當您將 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 檔案的內容。 將集區名稱取代為包含您自我裝載代理程式的集區名稱與 Docker 功能。
根據您要部署 Linux 或 Windows 應用程式,請務必分別設定 vmImage
為 ubuntu-latest
或 windows-latest
。
將取代 <target repository name>
為您要推送映像之容器登錄中的存放庫名稱。 例如: <your-docker-hub-username>/<repository-name>
。
將取代 <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'
選取儲存並執行。
在 [ 儲存並執行 ] 頁面上,選取 [ 儲存並再次執行 ]。
您可以監看管線執行並檢視記錄,以查看正在建置並推送至容器登錄的 Docker 映射。
您可以使用 Docker 範本建立 YAML 管線,以使用 Docker 範本建置 Docker 映射,並將 Docker 映射推送至 Azure Container Registry, 如使用 Docker YAML 建置和推送至 Azure Container Registry 中所述,或使用下列步驟。
Docker@2工作可用來建置映射,並將映像推送至容器登錄。
Docker@2工作旨在簡化在 Azure Pipelines 內建置、推送和管理 Docker 映射的程式。 此工作支持各種不同的 Docker 命令,包括建置、推送、登入、註銷、啟動、停止及執行。
下列步驟概述如何建立 YAML 管線,以使用Docker@2工作來建置和推送映射。
流覽至您的 Azure DevOps 專案,然後從左側功能表中選取 [管線 ]。
選取 [新增管線 ] 以建立新的管線。
選取 [GitHub ] 或 [GitHub Enterprise Server ] 作為原始程式碼的位置。
如果您尚未授權 Azure Pipelines 連線到您的 GitHub Enterprise Server 帳戶。
- 選取 [ 連線到 GitHub Enterprise Server]。
- 輸入您的帳戶詳細數據,然後選取 [ 驗證並儲存]。
選取您的存放庫。
選取 [入門管線] 範本以建立基本管線組態。
使用下列程式代碼取代azure-pipelines.yml的內容。
根據您要部署 Linux 或 Windows 應用程式,請務必分別設定 vmImage
為 ubuntu-latest
或 windows-latest
。 如果您使用自我裝載代理程式,請將 設定 vmImage
為包含具有 Docker 功能的自我裝載代理程式集區名稱。 您可以新增 demands: docker
屬性,以確保已選取已安裝 Docker 的代理程式。
將取代 <docker connection>
為您稍早建立的 Docker 服務連線名稱。
將取代 <target repository name>
為您要推送映像之容器登錄中的存放庫名稱。 例如: myregistry.azurecr.io/myimage
。
trigger:
- main
pool:
vmImage: 'ubuntu-latest'
variables:
repositoryName: '<target repository name>'
steps:
- task: Docker@2
inputs:
containerRegistry: '<azure resource manager connection>'
repository: $(repositoryName)
command: 'buildAndPush'
Dockerfile: '**/Dockerfile'
完成時,請選取 [ 儲存並執行]。
當您將 azure-pipelines.yml 檔案儲存至存放庫時,系統會提示您新增認可訊息。 輸入訊息,然後選取 [ 儲存並執行]。
使用自我裝載代理程式時,請確定 Docker 已安裝在代理程式的主機上,且 Docker 引擎/精靈是以更高的許可權執行。
Azure DevOps Server 不支援將 Docker 映射推送至 Azure Container Registry。
Docker@2工作旨在簡化在 Azure Pipelines 內建置、推送和管理 Docker 映射的程式。 此工作支持各種不同的 Docker 命令,包括建置、推送、登入、註銷、啟動、停止及執行。
下列步驟概述如何建立 YAML 管線,以使用Docker@2工作來建置和推送映射。
流覽至您的 Azure DevOps 專案,然後從左側功能表中選取 [管線 ]。
選取 [新增管線 ] 以建立新的管線。
選取 [GitHub ] 或 [GitHub Enterprise Server ] 作為原始程式碼的位置。
如果您尚未授權 Azure Pipelines 連線到您的 GitHub Enterprise Server 帳戶。
- 選取 [ 連線到 GitHub Enterprise Server]。
- 輸入您的帳戶詳細數據,然後選取 [ 驗證並儲存]。
選取您的存放庫。
選取 [入門管線] 範本以建立基本管線組態。
使用下列程式代碼取代azure-pipelines.yml的內容。
根據您要部署 Linux 或 Windows 應用程式,請務必分別設定 vmImage
為 ubuntu-latest
或 windows-latest
。 如果您使用自我裝載代理程式,請將 設定 vmImage
為包含具有 Docker 功能的自我裝載代理程式集區名稱。 您可以新增 demands: docker
屬性,以確保已選取已安裝 Docker 的代理程式。
將取代 <docker connection>
為您稍早建立的 Docker 服務連線名稱。
將取代 <target repository name>
為您要推送映像之容器登錄中的存放庫名稱。 例如: <your-project-id>/<your-image-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'
完成時,請選取 [ 儲存並執行]。
當您將 azure-pipelines.yml 檔案儲存至存放庫時,系統會提示您新增認可訊息。 輸入訊息,然後選取 [ 儲存並執行]。
使用自我裝載代理程式時,請確定 Docker 已安裝在代理程式的主機上,且 Docker 引擎/精靈是以更高的許可權執行。
若要建置映像,Docker 必須安裝在代理程式的主機上,而且 Docker 引擎/精靈必須以更高的許可權執行。 使用下列步驟,使用 YAML 管線編輯器建立管線。
移至您的集合並建立專案。
在您的專案中,選取 [ 管線]。
選取建立管線。
選取 [GitHub Enterprise Server ] 作為原始程式碼的位置。
如果您尚未授權 Azure Pipelines 連線到您的 GitHub Enterprise Server 帳戶。
- 選取 [ 連線到 GitHub Enterprise Server]。
- 輸入您的帳戶詳細數據,然後選取 [ 驗證並儲存]。
選取您的存放庫。
若要設定管線,請選取 [ 建置 Docker 映像 範本]。
在 YAML 管線編輯器中,以下列程式代碼取代 YAML 檔案的內容。 將集區名稱取代為包含您自我裝載代理程式的集區名稱與 Docker 功能。
根據您要部署 Linux 或 Windows 應用程式,請務必分別設定 vmImage
為 ubuntu-latest
或 windows-latest
。
將取代 <target repository name>
為您要推送映像之容器登錄中的存放庫名稱。 例如: <your-project-id>/<your-image-name>
。
將取代 <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'
選取儲存並執行。
在 [ 儲存並執行 ] 頁面上,選取 [ 儲存並再次執行 ]。
您可以監看管線執行並檢視記錄,以查看正在建置並推送至容器登錄的 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)
相關文章