docker中Jenkins流水线maven使用遇到的问题

在Docker环境下使用Jenkins进行Maven项目的流水线构建时,遇到了.m2目录映射问题,导致每次都需重新下载依赖。通过检查发现是权限问题,因Jenkins容器内以jenkins用户启动,无法在/root下创建目录。尝试以root用户启动容器,但构建的文件拥有root权限,引发Permission denied错误。最终解决方案是改为在jenkins用户下运行,并修改Maven的本地仓库路径为jenkins用户可写的目录,从而成功解决了权限问题。

官方文档使用流水线构建maven项目

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

使用的docker maven来构建项目,其中这一段参数:

args '-v /root/.m2:/root/.m2'

 是为了映射.m2目录,这样docker容器使用完销毁之后,之前下载的jar包还在,下次不用重新下载

但是遇到问题了,一直不能映射,每次都要重新下载,查阅资料无果,只能一步步看了.

 

进入运行中的maven容器看了下,/root/.m2下空空如也,就想着是不是默认目录不一样,去看了下docker-maven的说明,默认目录就是/root/.m2,然后又想到,是不是权限问题,就去在mvn命令加了个参数,结果换个目录就能生成了:

mvn -Dmaven.repo.local=/var/jenkins_home/.m2/repo

确认了是权限问题,jenkins是以jenkins用户启动的,所以jenkins容器中也是以jenkins用户启动maven 的,所以无法在/root下创建目录,那么以root用户启动容器即可

在流水线配置

docker {
      image 'maven:3-alpine'
      args '-u root --name maven -v /var/jenkins_home/maven/.m2:/root/.m2'
    }

完整配置:

pipeline {
  agent {
    docker {
      image 'maven:3-alpine'
      args '-u root --name maven -v /var/jenkins_home/maven/.m2:/root/.m2'
    }

  }
  stages {
    stage('maven package') {
      steps {
        sh 'mvn clean compile'
      }
    }

    stage('Restart Application') {
      steps {
         echo '...restart'
        }

      }
    }

  }
}

=====后续=====

改成root用户启动maven容器还是有问题,以root构建完的文件是root权限,在jenkins构建过程中会报Permission denied

所以还是老实的用jenkins用户,只是改一下maven生成的目录:

首先进入jenkins容器:

docker exec -it jenkins /bin/bash

创建repository目录:

mkdir -p /var/jenkins_home/maven/.m2/repository

然后编辑jenkins流水线,maven package的时候加上参数:

mvn -B -Dmaven.test.skip=true -Dmaven.repo.local=/var/jenkins_home/maven/.m2/repository -pl base-admin clean package -am -amd

修改后的流水线配置 :

pipeline {
  agent {
    docker {
      image 'maven:3-alpine'
      args '''--name maven -v /var/jenkins_home/maven/.m2:/var/jenkins_home/maven/.m2
'''
    }

  }
  stages {
    stage('maven package') {
      steps {
        sh 'mvn -B -Dmaven.test.skip=true -Dmaven.repo.local=/var/jenkins_home/maven/.m2/repository'
      }
    }
  }
}

 

总结:刚开始没找到方向,一直搞不定,其实这几个问题主要就是目录权限问题,顺着这个方向去解决问题就很简单了

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值