1、首先jenkins版本很重要!!!因为刚开始我看网上的帖子说jenkins/blueocean版本好用,我就下载了,但在安装插件的时候出现了插件安装不上的情况,而且是插件之间版本互相冲突,搞得我真的焦头烂额,最后没有办法我就选择了最新版本部署了。
2、部署jenkins镜像后,在打包项目和发布的时候,需要用到相关的系统环境,所以我们在启动jenkins镜像的时候就要把用到的宿主机上的相关的环境全部挂载进jenkins容器里,记住是用到的所有的地址!!!(比如构建发布maven镜像,则需要jdk,maven,git,docker,docker-compose等项目构建打包发布运行的相关环境)。
Jenkins运行的命令如下:
docker run -d -p 8080:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home -v /etc/localtime:/etc/localtime -v /usr/local/java/jdk1.8.0_161/:/usr/local/java/jdk1.8.0_161/ -v /usr/local/maven:/usr/local/maven -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker -v /usr/local/bin/docker-compose:/usr/local/bin/docker-compose -v /opt/yhp_system.yml:/opt/yhp_system.yml -v /opt/yhp_front.yml:/opt/yhp_front.yml -v /etc/docker/daemon.json:/etc/docker/daemon.json --name myjenkins jenkins/jenkins
其中/opt/yhp_system.yml是我运行项目是需要的yml配置文件;/var/jenkins_home地址是将jenkins镜像中的地址挂载到宿主机上,方便使用。
3、挂载进jenkins的环境的地址全部需要在宿主机上开放权限。
chmod 777 -R /var/run/docker.sock
chmod 777 -R /usr/bin/docker
chmod 777 -R /etc/docker/daemon.json
chmod 777 -R /root/.docker/
4、打包时相关的报错解决办法:
如果报IOException,No such file or directory,大多数是因为没有挂载/var/run/docker.sock。
如果报错unauthorized to access repository,大多数是因为config.json和daemon.json权限问题,即在Jenkins镜像中无法访问这两个文件,可以进入Jenkins中访问下这两个文件测试下是否有权限。
补充:上面运行的docker命令是对本地特定的文件进行挂载,如果后续可能会有很多yml文件在jenkins中构建的话,就需要将yml所在的文件夹挂载进去,命令改为如下:
docker run -d -p 8080:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home -v /etc/localtime:/etc/localtime -v /usr/local/java/jdk1.8.0_161/:/usr/local/java/jdk1.8.0_161/ -v /usr/local/maven:/usr/local/maven -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker -v /usr/local/bin/docker-compose:/usr/local/bin/docker-compose -v /opt/:/opt_yml/ -v /etc/docker/daemon.json:/etc/docker/daemon.json --name myjenkins jenkins/jenkins
其中/opt/:/opt_yml/是挂载进入镜像的命令,opt是宿主机上存放yml的文件夹,opt_yml是jenkins镜像中挂载的文件夹,文件挂载成功的前提是opt_yml为镜像中新的且无数据的文件夹。