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

如何在Google Cloud Docker构建中复制Maven产物至Tomcat目录

解决Google Cloud Build中Maven产物复制到Tomcat Docker镜像的问题

刚好我之前也处理过类似的Cloud Build+Tomcat镜像构建需求,核心就是利用Cloud Build的**工作空间(/workspace)**来共享步骤间的产物——所有Cloud Build步骤默认都会挂载同一个/workspace目录,第一步Maven打包生成的文件会留在这个目录里,第二步Docker构建时可以直接访问到。

下面是具体的配置方案:

1. 编写Cloud Build配置文件(cloudbuild.yaml)

这个文件定义完整的构建流程,包含Maven打包和Docker镜像构建两个核心步骤:

steps:
  # 步骤1:执行Maven打包,生成war/lib文件
  - name: 'gcr.io/cloud-builders/mvn'
    args: ['clean', 'package']
    # 如果你的项目代码不在根目录(比如在`my-app`子文件夹),需要指定dir参数
    # dir: 'my-app'

  # 步骤2:基于项目根目录的Dockerfile构建镜像
  - name: 'gcr.io/cloud-builders/docker'
    args: ['build', '-t', 'gcr.io/$PROJECT_ID/your-tomcat-app:latest', '.']

# 可选:如果需要将构建好的镜像推送到Google Container Registry,添加这部分
images:
  - 'gcr.io/$PROJECT_ID/your-tomcat-app:latest'

2. 编写Dockerfile(放在项目根目录,或你指定的dir路径下)

基于官方Tomcat镜像,直接复制Maven生成的产物到容器内的对应目录:

# 选择合适的Tomcat基础镜像(这里用Tomcat9+JDK11的组合)
FROM tomcat:9-jdk11

# 复制Maven打包生成的war包到Tomcat的webapps目录
# 注意:路径是相对于Cloud Build工作空间的,Maven默认把war包生成在target目录下
COPY target/your-application.war /usr/local/tomcat/webapps/

# 如果需要复制特定的lib文件到Tomcat的lib目录,比如某个自定义依赖
# COPY target/lib/your-custom-lib.jar /usr/local/tomcat/lib/

关键原理说明

  • Cloud Build的所有构建步骤共享同一个/workspace卷,所以第一步Maven执行mvn clean package后生成的target目录会完整保留在/workspace中。
  • 第二步Docker构建时,默认以/workspace为上下文目录,所以Dockerfile中的COPY指令可以直接引用target下的文件。

调试小技巧

如果你不确定产物是否生成在正确路径,可以在cloudbuild.yaml中添加一个临时步骤来查看/workspace的内容:

- name: 'gcr.io/cloud-builders/bash'
  args: ['ls', '-la', '/workspace/target']

这样就能在构建日志里确认war包或lib文件是否存在了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:21:08