Maven 仓库的代理应当放在它的 settings.xml 中。当 Jenkins 构建已经在 Maven 容器内运行时,把这个文件交给在那里运行的 Maven 进程。

把完整的既定 settings.xml 保存为名为 maven-proxy-settings 的 Jenkins Secret file 凭据。在现有容器阶段的步骤中:

withCredentials([
    file(credentialsId: 'maven-proxy-settings', variable: 'MAVEN_SETTINGS')
]) {
    sh 'mvn -s "$MAVEN_SETTINGS" -B verify'
}

该绑定会提供一个临时文件路径。单引号的 Groovy 字符串把变量展开留给 shell,而 shell 的双引号把路径保留为一个参数。Maven 的 -s 选项把该文件选作用户设置;-B 选择批处理模式。

凭据文件可以在其 proxies 段中写入构建的代理主机、端口、认证和 nonProxyHosts,以及任何其他必需的用户设置。Maven 中的代理绕过列表使用竖线分隔主机模式。

文件必须存在于 Maven 运行的位置

使用 Docker Pipeline 时,代理和容器需要兼容的挂载文件系统,绑定的路径才能在执行容器内可读。手动启动的 docker run 需要显式的文件挂载,最好只读,并且 Maven 必须拿到容器侧的路径。仅把宿主机路径作为环境变量传入并不能让文件可用。

把任何工作目录变更留在凭据绑定块内,这样密钥文件就不会落到可浏览的子目录工作区中。不要把文件打印到构建日志,也不要把它复制进持久化镜像。

这里选择的是用户设置。Maven 的全局设置同样可以参与,所以如果继承的镜像或其他配置仍在影响解析,请把两者都检查一遍。

相关文章