You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure DevOps Pipeline中构建含构建产物的Docker镜像

单流水线完成Java代码构建与Docker镜像打包方案

方案1:Docker多阶段构建(无需额外处理产物传递)

这个方案把Java构建和镜像打包的逻辑全封装在Dockerfile内,仅需一次构建命令即可完成全流程,不需要流水线单独处理产物传递。

Dockerfile示例:

# 构建阶段:使用带Maven的JDK镜像完成代码编译打包
FROM maven:3.8.6-openjdk-11 AS builder
WORKDIR /build
# 优先拷贝依赖配置文件,利用Docker层缓存避免每次构建重新下载依赖
COPY pom.xml .
RUN mvn dependency:go-offline -B
# 拷贝源码执行构建
COPY src ./src
RUN mvn clean package -DskipTests -q

# 运行阶段:仅保留运行环境和最终jar包,缩小镜像体积
FROM openjdk:11-jre-slim
WORKDIR /app
# 从构建阶段直接拷贝生成好的jar包
COPY --from=builder /build/target/*.jar ./application.jar
# 配置启动命令
ENTRYPOINT ["java", "-jar", "application.jar"]

你只需在流水线中执行docker build -t <镜像名>:<版本号> .,即可直接完成从源码到可运行Docker镜像的全流程。

方案2:流水线分步骤执行(适合需单独留存jar产物的场景)

如果你需要单独保存构建生成的jar包,可按顺序执行流水线步骤,同一次流水线任务的工作空间默认是共享的,不需要额外配置产物传递:

  • 步骤1:拉取项目源码到流水线工作目录
  • 步骤2:执行Java构建命令生成jar包:mvn clean package -DskipTests,构建完成后jar包默认生成在工作目录的target/路径下
  • 步骤3:使用匹配路径的Dockerfile执行镜像构建,Dockerfile示例:
FROM openjdk:11-jre-slim
WORKDIR /app
COPY ./target/*.jar ./application.jar
ENTRYPOINT ["java", "-jar", "application.jar"]
  • 步骤4:执行镜像构建命令:docker build -t <镜像名>:<版本号> .

注意:如果你的流水线使用Docker in Docker模式执行构建,需要确认执行docker build的步骤挂载了流水线的工作目录,否则会出现找不到jar包的问题

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 14:18:04