docker 安装并运行jenkins 后不识别服务器上的jdk,maven等配置!
Posted 努力lshdnks
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker 安装并运行jenkins 后不识别服务器上的jdk,maven等配置!相关的知识,希望对你有一定的参考价值。
公司测试环境搭建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
(切记不使用sudo docker-compose restart jenkins,如果修改了docker-compose.iml,该命令还是不生效,请使用上面那个!!)
docker-compose.iml文件内容如下:
version: '3'
services:
redis:
image: redis:alpine
container_name: cdc-redis
restart: always
volumes:
- ../data/redis:/data
environment:
- REDIS_PASSWORD=redis123
networks:
- cdc-net
ports:
- 8379:6379
redis-withpass:
image: redis:alpine
container_name: cdc-redis-withpass
command: redis-server --requirepass redis123
restart: always
volumes:
- ../data/redis-withpass:/data
- ./redis/redis.conf:/etc/redis/redis.conf
networks:
- cdc-net-1
ports:
- 7379:6379
zookeeper:
image: zookeeper:latest
container_name: cdc-zookeeper
restart: always
volumes:
- ../data/zookeeper:/data
- ../data/zookeeper:/datalog
networks:
- cdc-net
ports:
- 2181:2181
rabbitmq:
image: rabbitmq:3.7-management-alpine
container_name: cdc-rabbitmq
restart: always
volumes:
- ../data/rabbitmq:/var/lib/rabbitmq/mnesia
networks:
- cdc-net
ports:
- 5672:5672
- 15672:15672
environment:
- RABBITMQ_DEFAULT_USER=rabbitmq
- RABBITMQ_DEFAULT_PASS=rabbitmq123
postgres:
image: postgres:9.6-alpine
container_name: cdc-postgres
restart: always
volumes:
- ../data/postgres:/var/lib/postgresql
networks:
- cdc-net
ports:
- 5432:5432
environment:
- POSTGRES_PASSWORD=postgres123
mysql:
image: mysql:5.7
container_name: cdc-mysql
restart: always
networks:
- cdc-net
ports:
- 8306:3306
volumes:
- ../data/mysql:/var/lib/mysql
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: mysql123
jenkins:
image: jenkins/jenkins:alpine
container_name: cdc-jenkins
restart: always
networks:
- cdc-net
ports:
- 8080:8080
- 50000:50000
volumes:
- ../data/jenkins:/var/jenkins_home
- /usr/java/jdk1.8.0_221-amd64:/usr/java/jdk1.8.0_221-amd64
- /home/maven:/home/maven
networks:
cdc-net:
external: false
cdc-net-1:
external: false
核心点在于挂载
volumes:
- ../data/jenkins:/var/jenkins_home
- /usr/java/jdk1.8.0_221-amd64:/usr/java/jdk1.8.0_221-amd64
- /home/maven:/home/maven
以上是关于docker 安装并运行jenkins 后不识别服务器上的jdk,maven等配置!的主要内容,如果未能解决你的问题,请参考以下文章
ubuntu 中安装jenkins,基于docker运行jenkins
Jenkins+Docker 一键自动化部署 SpringBoot 项目