我目前正在尝试将 Jenkins 管道脚本迁移到 Azure Pipelines。在 Jenkins 构建中,本地 Dockerfile 用于设置代理并运行多个 Maven 命令。 Dockerfile 如下所示:
FROM maven:3.9.0-eclipse-temurin-17
RUN apt-get update && apt-get install -y openjdk-17-jdk xvfb
我正在尝试将此设置转换为
azure-pipelines.yml
文件,在其中我在一个作业中构建 Docker 映像,以便在后续作业中使用:
jobs:
- job: buildImage
pool:
vmImage: 'ubuntu-latest'
steps:
- task: Docker@2
inputs:
command: 'build'
Dockerfile: 'Dockerfile'
tags: 'buildimage:latest'
- job: buildJar
displayName: Build jar
dependsOn:
- buildImage
timeoutInMinutes: 10
container:
image: buildimage:latest
steps:
- script: 'mvn clean install'
问题是buildJar作业无法找到buildImage作业中构建的本地图像
buildimage:latest
。是否可以按照我设想的方式进行设置?或者我应该首先将图像推送到私人注册表,使用私人代理,还是考虑其他方法?任何建议将不胜感激。
当您使用 Microsoft 提供的云托管代理时,它们会在每次作业后回收,因此您无法对作业之间的本地环境做出假设。
要复用容器,容器注册表是最常见的方法。
如果您的 docker 容器只是一组特定的 JDK 工具并且不经常更改,我会使用单独的管道来创建和推送容器映像。
要使用容器注册表,您需要将 service-connection 指定为端点。
- job: buildJar
container:
image: buildimage:latest
endpoint: mycontainer_registry_service_connection
steps:
- script: 'mvn clean install'