
jenkins 在 openshift 环境中执行 gradle 构建时,因无法访问 `repo.maven.apache.org` 导致依赖解析失败,根本原因是构建节点缺乏代理配置;本地成功而 ci 失败,典型体现为网络策略差异。
该错误本质是 Gradle 在无代理配置的受限网络环境中(如企业内网或 OpenShift Jenkins Agent)尝试直连公网 Maven 中央仓库,但因防火墙、NAT 或安全组策略导致 HTTPS 连接超时(Connect timed out),进而无法下载 spring-boot-gradle-plugin 和 dependency-management-plugin 等关键构建插件。
虽然 buildscript.repositories 中已声明 mavenCentral() 和 plugins.gradle.org,但这仅控制运行时依赖的仓库源,而 Gradle 自身在初始化阶段(如解析 classpath 插件)需通过 JVM 级网络层发起 HTTP(S) 请求——此时若未配置系统级代理,请求将直接失败。
✅ 正确解法:通过 gradle.properties 设置 JVM 系统属性,显式声明 HTTPS 代理
在 Jenkins Pipeline 的工作目录(或 Gradle 用户主目录)下,确保存在 gradle.properties 文件,并添加以下代理配置(值需根据企业实际网络环境替换):
# gradle.properties systemProp.https.proxyHost=your-proxy.company.com systemProp.https.proxyPort=8080 systemProp.http.nonProxyHosts="localhost|127.0.0.1|*.company.com|openshift.internal" systemProp.https.proxyUser=your-username systemProp.https.proxyPassword=your-password
⚠️ 注意事项:nonProxyHosts 使用 | 分隔,支持通配符 *,务必包含内部服务域名(如 OpenShift API 地址、私有 Nexus 仓库等),避免代理环路;若代理需认证,请同时设置 proxyUser 和 proxyPassword;敏感信息建议通过 Jenkins Credentials Binding 插件注入,而非硬编码;不推荐在 build.gradle 中用 System.setProperty() 动态设置——该方式在 Daemon 模式下可能不生效,且违反 Gradle 配置最佳实践;对于容器化 Jenkins Agent,可将 gradle.properties 作为 ConfigMap 挂载,或在 Pipeline 中通过 sh 命令动态生成。
? 补充建议(提升健壮性):
- 在 buildscript { repositories { ... } } 中优先配置私有镜像仓库(如 Nexus/Artifactory),并启用 mavenCentral() 作为备用:
buildscript { repositories { maven { url "https://nexus.company.com/repository/maven-public/" } mavenCentral() // fallback maven { url "https://plugins.gradle.org/m2/" } } // ... } - 在 Jenkins Pipeline 脚本中验证代理是否生效:
sh 'curl -I https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-gradle-plugin/2.7.7/spring-boot-gradle-plugin-2.7.7.pom --proxy http://your-proxy:8080'
总结:Gradle 构建超时问题多源于网络可达性缺失,而非配置语法错误。通过 gradle.properties 统一管理 JVM 网络代理,既符合 Gradle 官方推荐方式,又能确保 Daemon 复用、CI 环境一致性与安全性。










