15min运维之Docker运行Jenkins从开始到放弃

某新环境需要Jenkins,准备用docker “一条run命令搞定“。其他工具用docker屡试不爽,这次Jenkins是从开始到放弃。

Jenkins作为CI工具,构建过程需依赖对应的构建环境,如:maven、java、npm、docker等。如今是docker盛行的年代,什么都可以打成镜像,docker倒是成了标配。

简单环境示例

Jenkins dockerhub 官方镜像

假设只需要准备maven和java环境,只要把宿主机的maven和jdk挂载到容器即可,再给容器中配置下PATH变量

docker run -d --restart=always --name jenkins \
-p 8085:8080 \
-p 50000:50000 \
-v /usr/local/custom:/lib/custom \
-v /jenkins/data:/var/jenkins_home \
--env-file=/jenkins/env \
jenkins

上述命令中,/usr/local/custom 存放了 apache-maven-3.3.9jdk1.8.0_121/jenkins/data 用于存储jenkins的数据。

/jenkins/env 存储了环境变量,如下:

JAVA_HOME=/lib/custom/jdk1.8.0_121
M2_HOME=/lib/custom/apache-maven-3.3.9
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/lib/custom/jdk1.8.0_121/bin:/lib/custom/apache-maven-3.3.9/bin

这样一个简单的CI环境就OK了。

Docker环境示例

Using Docker-in-Docker for your CI or testing environment? Think twice
The simple way to run Docker-in-Docker for CI
在(Docker里的)Jenkins里运行Docker

当Jenkins本身就是容器时,在容器里面构建镜像就有一丢丢麻烦了,有2个方案:

  • DinD(Docker-in-Docker):基于Jenkins官方镜像直接安装docker做一个新镜像,形成一个完整的隔离环境。

  • DooD(Docker-outside-of-Docker):将宿主机的docker sock映射到Jenkins容器,直接用宿主机的docker,相当于把一切又委托给了宿主机。

我选了DooD,踩了几个坑,尽非功夫,直接放弃了。有兴趣的伙伴可以参考上面的三篇文章,描述的非常清楚。

小结

无论是DinD,还是DooD,目的都是为了CI。DooD其实没啥意义,DinD又有点作,直接在宿主机安装不就得了。

Jenkins作为CI工具,可以非常稳定的运行在宿主机上,也不存在迁移的问题(当然,如果主机配置低,后续JOB又多,还是得迁移或主机升配),直接部署在主机上是最优选择。

因此,是否以Docker来运行某个产品,得根据具体情况来确定。

本篇纯属技术小伙的好奇心驱使。


欢迎关注陈同学的公众号,一起学习,一起成长

猜你喜欢

转载自blog.csdn.net/myle69/article/details/80993676