1. 前言
《CentOS7安装部署Jenkins》一文中学习了Jenkins的安装方法,如果使用Docker来安装Jenkins,同样可以简单很多。
前置条件是安装配置好了docker环境,安装方法参考《Docker入门》。已知docker宿主机IP为192.168.56.130。
2. 安装Jenkins
1、登录dockerhub查看需要的jenkins-Docker Official Images。
需要注意,官方的jenkins最新版本是2.60.3,版本太低!如果安装该版本,安装后会出现各种插件使用不了的情况。因此,这里真正需要使用的jenkins命名空间下的jenkins。
2、下载jenkins镜像(以2.210为例)docker pull jenkins/jenkins:2.210
3、启动jenkins服务
1 | docker run --name vk-jenkins -d \ |
以上命令:
- 命名容器为vk-jenkins,后台运行
- 映射宿主机8080、50000端口到容器8080、50000端口
- 挂载宿主机目录/opt/jenkins_home到容器目录/var/jenkins_home
更多启动命令参数可以参考How to use this image。
启动报错:
1 | docker: Error response from daemon: driver failed programming external connectivity on endpoint vk-jenkins (d95f7502bb87d6795547061a2f13b5e2ba44648977399fcde1c05640f678554a): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 50000 -j DNAT --to-destination 172.17.0.2:50000 ! -i docker0: iptables: No chain/target/match by that name. |
解决办法:重启docker,然后重新执行启动命令。
1 | systemctl restart docker |
4、验证安装docker ps
jenkins启动正常的话就可以看到vk-jenkins容器。
如果启动失败,可以使用docker logs vk-jenkins
查看失败原因并进行解决。本例中确实报错了,提示目录权限问题:
1 | touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied |
这是因为/opt/jenkins_home目录的拥有者为root用户,而容器中jenkins user的uid为1000,因此需要修改目录权限。
1 | chown -R 1000:1000 /opt/jenkins_home |
3. 配置使用Jenkins
1、加速插件安装(推荐)
参考Jenkins安装插件提速,修改/opt/jenkins_home/updates/default.json。
1 | sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json |
修改完成重启vk-jenkins,正常进入安装流程,直观感觉就是“安装推荐的插件”这一步速度能够提高一百倍。
2、查看初始密码cat /opt/jenkins_home/secrets/initialAdminPassword
3、jenkins配置
浏览器访问:http://192.168.56.130:8080/
初始密码填入页面,开始进行jenkins配置。
4、后续
接下来的配置和使用参考《CentOS7安装部署Jenkins》即可。
至此,docker安装配置jenkins完成。因为第一次使用的是官方的jenkins2.60.3镜像,所以遇到了一些坑,下面一节中进行记录。
4. jenkins2.60.3问题解决
1、安装推荐的插件,会卡在Getting Started。
。这是因为安装插件前会尝试连接 www.google.com ,来判断网络是否连通。国内用户需要改成 www.baidu.com ,vim /opt/jenkins_home/updates/default.json
,找到google,修改为baidu。
1 |
|
2、重启jenkins特别慢docker restart vk-jenkins
发现重启特别特别慢,大概要10分钟左右才能重启成功。而且,重启后connectionCheckUrl中的baidu又变成了google!!!
3、修改updatecenter
怀疑在jenkins启动时会根据其他地方的配置更改default.json,但是没有找到。查找资料发现了一篇update jenkins Updatecenter from CLI,其中一行:
1 | wget -O default.json http://updates.jenkins-ci.org/update-center.json |
那么,如果修改updatecenter为中国的镜像站,是不是就会使用中国的update-center.json代替default.json?试一试,vim /opt/jenkins_home/hudson.model.UpdateCenter.xml
,原文为:
1 |
|
中国镜像站去哪里找呢?可以在the status of Jenkins mirrors网站上选择。
hudson.model.UpdateCenter.xml修改为:
1 |
|
删除/opt/jenkins_home/updates目录,再次重启vk-jenkins。
重启速度飞快,10秒左右,但是default.json中依然是google,因为镜像站里的update-center.json和jenkins源站里的update-center.json相同。既然jenkins启动时都会使用远端的update-center.json替代本地的default.json,那么解决该问题的方法就是给hudson.model.UpdateCenter.xml一个远端的修改后的update-center.json,或者不让jenkins获取到远端update-center.json。
4、填写假的updatecenter
修改hudson.model.UpdateCenter.xml为:
1 |
|
因为获取不到update-center.json,然后就可以跳过安装插件的步骤。
5、更换新版jenkins镜像
jenkins安装成功,但是在jenkins的系统配置页面,可以看到很多插件报错,而且无法修复,系统建议进行jenkins升级。
此时,郝同学才意识到,官方jenkins镜像不是最新版!!!需要改用jenkins命名空间下的新版jenkins镜像,但是“安装推荐的插件”这一步依然很慢,几个小时甚至更久才能安装成功。加速方法可以参考本文 配置使用Jenkins 一节中的 加速插件安装。