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

使用GitLab CI执行Maven打包时上传制品报错求助

问题描述

我在GitLab CI中执行mvn package war:war命令,使用的YAML配置如下(忽略缩进问题):

stages:
 - package
job1:
 stage: package
 script:
   - mvn package war:war
 artifacts:
  paths:
   - target/*.war

执行后出现报错,怀疑是代理问题但不确定,查了相关博客没找到确切方案,求解决。

排查与解决方案

1. 先明确报错核心原因

虽然看不到报错截图,但Maven在CI环境中失败最常见的就是依赖拉取失败,大概率和网络/代理有关。先在CI脚本里加两步命令,确认Maven的实际配置:

script:
  - mvn -v  # 确认Maven版本
  - mvn help:effective-settings  # 打印生效的Maven配置,重点看代理、仓库是否正确
  - mvn package war:war

通过help:effective-settings的输出,能直接看到Maven实际使用的代理地址、仓库镜像,快速判断是不是代理配置没生效。

2. 配置GitLab CI中的Maven代理

如果确认是代理问题,有两种实用配置方式:

方式一:运行时直接传递代理参数

在script的Maven命令后追加代理参数,适合简单场景:

script:
  - mvn package war:war -Dhttp.proxyHost=你的代理IP/域名 -Dhttp.proxyPort=端口号 -Dhttps.proxyHost=你的代理IP/域名 -Dhttps.proxyPort=端口号 -Dhttp.nonProxyHosts="*.内部域名.com|localhost"

如果代理需要账号密码,再添加:
-Dhttp.proxyUser=你的用户名 -Dhttp.proxyPassword=你的密码 -Dhttps.proxyUser=你的用户名 -Dhttps.proxyPassword=你的密码

方式二:注入自定义settings.xml

把配置好代理的settings.xml内容存为GitLab CI的保密变量(比如命名为MAVEN_SETTINGS),然后在脚本中生成配置文件:

script:
  - mkdir -p ~/.m2
  - echo "$MAVEN_SETTINGS" > ~/.m2/settings.xml
  - mvn package war:war

这种方式更灵活,适合需要配置私有仓库、多代理规则的复杂场景。

3. 其他排查方向

  • 检查GitLab Runner所在服务器的网络:直接在Runner上执行curl https://repo1.maven.org/maven2,确认能访问中央仓库
  • 核对项目pom.xml:看是否有自定义私有仓库,这些仓库在CI环境中是否能正常访问
  • 统一Maven版本:确保CI使用的Maven版本和本地开发环境一致,部分老版本Maven对HTTPS代理的支持存在bug

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 14:15:39