公司测试环境搭建jenkins自动构建部署,采用的是一套docker安装运行,比如mysql,redis,nginx,zk,es等都是用的docker拉取并运行,jenkins也不例外,后面发现jenkins上配置构建项目时,通过报错信息发现jenkins不识别mvn命令,不识别java命令,不识别自定义的maven本地仓库地址,但是服务器环境上又是有目录,java和mvn命令正常的。。
原理:docker通过镜像创建并启动容器,一个容器就是一个独立隔离的沙箱,所以并不能识别服务器上的环境配置,需要我们在启动容器时通过-v参数命令将服务器目录挂载到docker容器指定目录!拿jenkins举例来说,如果你是用docker运行的jenkins,那么是不识别你服务器上配置的jdk环境和maven环境的,你在jenkins里系统配置中去填写你服务器上的jdk目录和maven目录以及配置文件目录,后面项目构建是肯定会报错不识别的。jenkins所在的容器是docker某个具体容器,它只能识别出这个容器里的东东,容器自己有一套独立完整的目录,可以通过命令 docker exec -it containerID /bin/bash 进入指定的容器id查看(containerID换成你的docker容器id)。
解决办法:核心是通过创建启动docker容器时带上-v参数命令,将将服务器目录挂载到docker容器目录。
一般docker都喜欢用docker-compose.iml配置文件来保存配置命令等,方便快捷
进入配置文件所在然后执行命令
cd /data/docker-services/docker-compose
sudo docker-compose up -d jenkins
ÿ