使用 Azure Pipelines 生成容器映像并将其推送到注册表
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
本文指导你完成使用 Azure Pipelines 生成 Docker 映像并将其推送到 Azure 容器注册表、Docker 中心和 Google Artifact Registry 的设置和配置。 此外,它还详细介绍 System.AccessToken
了如何在管道中使用安全身份验证。
本文指导你完成使用 Azure Pipelines 生成 Docker 映像并将其推送到 Docker 中心和 Google Artifact Registry 的设置和配置。 此外,它还详细介绍 System.AccessToken
了如何在管道中使用安全身份验证。
了解如何创建 YAML 管道,以生成 Docker 映像并将其推送到容器注册表。 Docker@2任务用于生成映像并将其推送到容器注册表。
先决条件
- 一个 Azure DevOps 项目。
- 容器注册表(Docker Hub、Google Artifact Registry 或 Azure 容器注册表)。
- 包含 Dockerfile 的 GitHub 存储库。 如果没有示例存储库,可以使用 示例存储库 在浏览器中,转到示例存储库,然后将其分叉到 GitHub 帐户。
- Docker。 如果使用自承载代理,请确保已安装 Docker,并使用提升的权限运行 Docker 引擎。 Microsoft托管代理已预安装 Docker。
- 一个 Azure DevOps 项目。
- 容器注册表(Docker 中心或 Google Artifact Registry)。
- 包含 Dockerfile 的 GitHub 存储库。 如果没有示例存储库,可以使用 示例存储库 在浏览器中,转到示例存储库,然后将其分叉到 GitHub 帐户。
- Docker。 如果使用自承载代理,请确保已安装 Docker,并使用提升的权限运行 Docker 引擎。 Microsoft托管代理已预安装 Docker。
创建 Docker 服务连接
将容器映像推送到注册表之前,需要在 Azure DevOps 中创建服务连接。 此服务连接存储使用容器注册表进行安全身份验证所需的凭据。 转到 Azure DevOps 项目中的服务连接 页,创建新的服务连接并选择 Docker 注册表 连接类型。
为 Docker 中心和 Google Artifact Registry 创建服务连接有不同的过程。
在“Docker 注册表服务连接”下选择“Docker Hub”选项,然后提供你的用户名和密码以创建 Docker 服务连接。
Azure DevOps Server 不支持将 Docker 映像推送到Azure 容器注册表。
若要创建与 Google Artifact Registry 关联的 Docker 服务连接,请执行以下操作:
在 Google Cloud Platform (GCP) 控制台中打开项目,然后打开 Cloud Shell
为了节省键入项目 ID 和计算引擎区域选项所花费的时间,请运行以下命令来设置默认配置值:
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]
GCP 项目的名称。[PROJECT-ID]
- Docker ID:
_json_key
- Docker 密码:粘贴
azure-pipelines-publisher-oneline.json
的内容
- 服务连接名称:
gcrServiceConnection
选择“保存”以创建服务连接
创建 Azure Pipeline 以生成和推送 Docker 映像
Docker@2任务旨在简化在 Azure Pipelines 中生成、推送和管理 Docker 映像的过程。 此任务支持各种 Docker 命令,包括生成、推送、登录、注销、启动、停止和运行。
以下步骤概述了如何创建使用Docker@2任务生成和推送映像的 YAML 管道。
导航到 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 管道编辑器创建管道。
转到集合,并创建项目。
在项目中,选择“管道”。
选择 Create Pipeline。
选择 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 映像并将其推送到 Azure 容器注册表,如使用 Docker YAML 生成 Docker 映像并将其推送到Azure 容器注册表或使用以下步骤。
Docker@2任务用于生成映像并将其推送到容器注册表。
Docker@2任务旨在简化在 Azure Pipelines 中生成、推送和管理 Docker 映像的过程。 此任务支持各种 Docker 命令,包括生成、推送、登录、注销、启动、停止和运行。
以下步骤概述了如何创建使用Docker@2任务生成和推送映像的 YAML 管道。
导航到 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 容器注册表。
Docker@2任务旨在简化在 Azure Pipelines 中生成、推送和管理 Docker 映像的过程。 此任务支持各种 Docker 命令,包括生成、推送、登录、注销、启动、停止和运行。
以下步骤概述了如何创建使用Docker@2任务生成和推送映像的 YAML 管道。
导航到 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 管道编辑器创建管道。
转到集合,并创建项目。
在项目中,选择“管道”。
选择 Create Pipeline。
选择 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)
相关文章