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

GitLab CI如何使用多镜像完成Java Maven项目构建与Docker镜像打包

GitLab CI 多镜像构建Java项目Docker镜像实现方案

核心逻辑

GitLab CI 支持为每个独立Job指定运行镜像,不同Job之间的产物通过artifacts自动传递,完全满足你分阶段使用不同镜像的需求。你可以把流水线拆为2个串行阶段即可:

  1. 编译构建阶段:用maven:3.3.9-jdk-8镜像打包生成jar包
  2. 镜像构建阶段:用docker:19.03.12镜像基于上一步生成的jar包构建Docker镜像

完整配置示例

以下是可直接使用的.gitlab-ci.yml配置:

# 定义流水线阶段,按顺序执行
stages:
  - build_jar
  - build_docker_image

# 缓存maven依赖,避免每次构建重新下载
cache:
  paths:
    - .m2/repository/

# 第一阶段:构建jar包
build_jar:
  stage: build_jar
  image: maven:3.3.9-jdk-8
  script:
    - mvn clean package -Dmaven.test.skip=true -Dmaven.repo.local=.m2/repository
  # 配置构建产物,后续Job会自动下载该产物
  artifacts:
    paths:
      # 这里替换为你实际jar包生成的路径,通常是target目录下的可执行jar
      - target/*.jar
    expire_in: 1 day # 产物保留时长,按需调整

# 第二阶段:构建Docker镜像
build_docker_image:
  stage: build_docker_image
  image: docker:19.03.12
  # 启用Docker in Docker服务,版本和镜像版本保持一致
  services:
    - docker:19.03.12-dind
  variables:
    # DinD服务连接地址
    DOCKER_HOST: tcp://docker:2375
    # 关闭TLS验证,适配19.03版本的DinD配置
    DOCKER_TLS_CERTDIR: ""
  script:
    # 可按需添加登录镜像仓库的命令,比如登录GitLab自带镜像仓库:
    # docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
    # 构建镜像,镜像名称和标签按需调整
    - docker build -t my-java-app:latest .
    # 可按需添加推送镜像的命令:docker push my-java-app:latest

关键配置说明

  • 单Job单独指定镜像:不需要配置全局image字段,每个Job内部指定image即可实现不同阶段使用不同运行环境
  • 产物自动传递:build_jar Job配置的artifacts会被后续阶段的所有Job自动下载,如果你的流水线有更多无关Job,可以在build_docker_image Job中添加dependencies: [build_jar],指定仅下载该Job的产物,减少传输体积
  • DinD配置:必须配置对应版本的docker:dind服务,同时设置对应的DOCKER_HOST变量才能正常使用Docker命令

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:48:05