如何配置Jenkins容器运行Maven容器以使用代理

时间:2020-04-05 10:09:22

标签: docker maven jenkins

全部, 当我尝试使用Jenkins构建带有Maven的Java应用程序(https://jenkins.io/doc/tutorials/build-a-java-app-with-maven/)时。 我有问题,我的环境访问网络必须使用私有代理。
我的Jenkins在容器中运行,当我使用下面的管道时,Jenkins容器将提取Maven图像并在容器中运行maven,但是由于环境具有代理,因此maven容器未配置为使用代理,因此maven无法下载依赖项。

有人可以帮助我如何让Maven容器使用代理吗?谢谢

pipeline {
    agent {
        docker {
            image 'maven:3-alpine' 
            args '-v /root/.m2:/root/.m2' 
        }
    }
    stages {
        stage('Build') { 
            steps {
                sh 'mvn -B -DskipTests clean package' 
            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

首先:要在Maven中使用公司代理,您需要在settings.xml中对其进行配置(请参阅Maven文档中的Configuring a proxy)。

第二个:在容器中运行的管道中,您可以通过多种方式来执行此操作。这里是其中一些:

  1. 鉴于您正在映射/root/.m2:/root/.m2,您可以将settings.xml放在/root/.m2中。假定您出于安全原因将Jenkins执行为root,我在生产中强烈建议不要这样做。

    如果要以其他用户身份执行Jenkins,则必须相应地调整卷映射。

  2. settings.xml文件映射为容器中的卷,并告诉Maven使用它,就像这样:

pipeline {
  agent {
    docker {
      image 'maven:3-alpine' 
      args '-v /root/.m2:/root/.m2 -v /path/to/settings.xml:/my/settings.xml:ro' 
    }
  }
  stages {
    stage('Build') { 
      steps {
        sh 'mvn -s /my/settings.xml -B -DskipTests clean package' 
      }
    }
  }
}
  1. settings.xml文件作为凭证存储在Jenkins中,并与withCredentials一起使用,如果您的settings.xml包含密码,这将很有意义:
  ...
  steps {
    withCredentials([
      file(credentialsId: 'maven-settings', variable: 'MAVEN_SETTINGS')
    ]) {
      sh 'mvn -s $MAVEN_SETTINGS -B -DskipTests clean package'
    }
  }
  ...
  1. 构建包含您的maven:3-alpine文件的自定义映像,而不是使用官方Maven映像settings.xml,并在您的管道中使用它。