Jenkins 使用 docker 构建 maven 镜像无法访问 nexus

Jenkins use docker to build maven image cannot access to nexus

我正在使用 Jenkins 管道下载我的代码并在官方 Maven 容器中构建它

 pipeline {
    agent none
    stages {
           stage('Back-end build') {
            agent {
                docker { 
                    image 'maven'
                    label 'master'       
                 }
            }
            steps {
                sh 'mvn -f de.vitasystems.qrcode.generator/pom.xml -s /usr/share/maven/ref/settings.xml  clean package'
                stash includes: 'target/*.war', name: 'app' 
                }
            }
        }
    }

这样做之后,我意识到我需要 settings.xml 用于 nexus 存储库配置和设置 - security.xml 才能下载它。 然后我这样做了:

  1. 我创建了另一个使用 maven 的 Dockerfile(来自 maven) 并复制必要的文件 setting.xml 并用于 以前的管道。
  2. 它指的是正确的存储库,但无权下载文件

添加安全性-settings.xml 是为了能够从我的 nexus 下载数据(maven nexus 密码)但我无法引用或使用它。

如何在此容器中使用安全性-settings.xml?? Maven 文档说我将文件放在 $HOME/.m2 文件夹中,但它不起作用。 问候。

尝试使用配置文件提供者插件,他会将 settings.xml 从 master 复制到您的工作区

stage('Build')
            {
                steps {
                configFileProvider(
                        [configFile(fileId: 'your-id-xxx', variable: 'MAVEN_SETTINGS')]) {
                    sh 'mvn -s $MAVEN_SETTINGS clean install -P integration-tests'
                }

我已经找到了解决方案,只有在你使用 root 用户时才会使用设置-安全。 我制作了一个 Dockerfile 来创建一个新的 docker 图像,总结:

FROM maven
COPY settings.xml /root/.m2/settings.xml
COPY settings-security.xml root/.m2/settings-security.xml

ENTRYPOINT ["/usr/local/bin/mvn-entrypoint.sh"]
CMD ["mvn"]

此映像将包含安全配置,但为了能够在 jenkinsfile 中使用,您需要 运行 使用 root 用户的容器。 示例

agent {
     docker { 
        image 'maven'
        label 'master'
        args '-u root'
            }