Jenkins+maven+docker 解决项目持续集成
容器的管理可以选择rancher,jenkins可以在rancher上进行安装,本文先不介绍rancher,安装jenkins我选用的是docker安装。以后再介绍rancher的整体管理。
1:拉取jenkins镜像。 从dockerhub上拉取jenkins镜像,我拉取的是latest版本
docker pull jenkins

2:建立jenkins_home文件夹,启动jenkins时挂载这个文件夹后续配置方便
mkdir -p /docker/jenkins_home

3:因为 jenkins user - uid 1000,所以这里我们更改目录用户组及用户(更详细的可见:https://github.com/jenkinsci/docker/blob/master/README.md#usage)
chown -R 1000:1000 /docker/jenkins_home
4:需要在jenkins里用docker命令,把jar包打成镜像文件,可因为jenkins我们是用docker启动的,这里权限会有问题,docker.sock不让访问,网上有一些处理办法,我把我使用的写下来供大家参考
新写一个Dockerfile文件
FROM jenkins
LABEL maintainer="sunlin1111@163.com"
USER root
ARG dockerGid=999
RUN echo "docker:x:${dockerGid}:jenkins" >> /etc/group
USER jenkins
在Dockerfile文件目录下,运行docker生成镜像命令:
docker build -t "myjenkins" .

查看生成的镜像
docker images

5:给docker.sock赋读写权限
chmod 777 /var/run/docker.sock

6:运行jenkins容器
docker run -d --restart unless-stopped --name jenkins -p 30000:8080 -p 30001:50000 -v /docker/jenkins_home:/var/jenkins_home -v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock -v /usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7 myjenkins
-v /usr/bin/docker:/usr/bin/docke
-v /var/run/docker.sock:/var/run/docker.sock
-v /usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7
这三个挂载是解决在jenkins上可以使用docker命令

查看启动日志:
docker logs -f jenkins

7:启动成功后可以登陆jenkins的前台管理页面
http://192.168.155.44:30000

第一次登陆需要注册下,按照页面提示正常注册就可以。
页面提示的路径,因为我的本机挂载的,所以在本机的路径是/docker/jenkins_home/secrets/initialAdminPassword
注册完成的页面是:

8:安装maven
因为jenkins本身不带maven插件,所以需要自己安装下,由于我们的虚拟机中是没有直接安装maven软件的,我们可以在全局工具配置中安装maven, 选择一个合适的版本,勾选自动安装,之后直接保存,需注意的是,现在jenkins并不会立即给你安装maven软件

接下来我们在插件管理中查找maven插件,我们选择好maven integration插件,然后点击直接安装

9:配置maven
大家都知道我们要从maven库下载代码需要配置setting.xml,用jenkins时也需要把setting.xml配置好。
在目录/docker/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/jenkins-in-maven/conf下修改setting.xml文件。

10:创建一个新任务
在首页点击新建任务

然后选择构建一个maven项目,任务名称我一般都写入项目名称

点击构建一个maven项目,进入到项目配置页面。




全部配置好后点击保存按钮

点击立即构建按钮,这时就会先从git上下载项目源代码,然后进行代码编译。点击控制台输出可以看到输入日志。


这时maven部份就全部完成了,可以把git私有仓库上的源代码打成jar包。
打包好的文件在虚拟机上的路径:

11:配置docker
下载docker插件,在jenkins中安装docker插件,在系统管理->插件管理里找到并安装如下插件(Docker plugin):

如果成功安装插件,你会在你的系统管理菜单里看见Docker菜单:

然后在系统管理->系统设置中的最下面你会看到新增一个Docker云:

把前面挂载的docker.sock 文件写入Docker Host URI 中:unix:///var/run/docker.sock,可以点击TestConnection按钮进行测试是否连接成功。
连接成功后,可以在系统管理菜单里进入Docker菜单,看到如下界面,点击docker进入后,里面会向你展示你宿主机上的所有镜像以及容器:

然后返回任务页面,选择配置,在Post Steps里把docker建立镜像的命令输入进去:

点击保存,然后再构建工程,会发现docker构建镜像的命令已经执行了。

在虚拟机上执行docker images命令可以看到新创建好的镜像

12:docker镜像放到私有docker仓库
在Post Steps这部中,需要给Push image打条,然后配置Registry Credentials(登陆私有docker仓库的用户名、密码),点击保存。

配置好后,再次构建任务,最后就能看到项目成功的上传到了docker私服中。
(我这里是用docker启动的jenkins,当在虚拟器上用docker login命令登陆过一次私有库后,会在根目录下生成一个.docker/config.json文件,我不清楚是否需要把这个文件放到jenkins容器中的/var/jenkins_home目录下,让容器中的环境可以找到docker上传地址。这块的测试,我用的是yum安装的jenkins,push镜像的时候没有出现这类问题)