小强哥博客

小强哥,小强哥博客,技术大咖

通过jenkins构建springboot镜像

springboot in docker中介绍了如和将springboot程序放入docker中,这篇文章主要记录一下如何通过jenkins构建一个docker镜像。

image

内容需要你对docker容器技术有一定的了解,如docker pull、docker registry、docker build、docker run,同时需要对jenkins技术有一定的了解。

不得不说jenkins确实是个好东西,我只需要向git上提交代码其余的打包、发布、测试都是jenkins帮我搞定,我只需要在那里喝喝茶、聊聊天,几分钟以后看看测试报告。

如果现在有的团队还是手动的打包、手动发布,我觉得如果一个团队还是这么玩那趁早赶紧离职吧。参考持续构建、持续交付、持续迭代

首先你得保证jenkins和docker在同一台物理机或者虚拟机中,最好不好将jenkins放入到docker容器中,否则在构建中会出现找不到docker daemon问题,具体最后会降到。

第一步

将dockerfile文件放入到程序的根目录下,如下dockerfile内容,

FROM centos
RUN yum -y update \
    && yum -y install git maven \
    && git http://xxx.git.com/xxx.git
RUN cd /xxx \
    && mvn clean package -Dmaven.test.skip=true
ENTRYPOINT java -jar /xxx.jar

这个dockerfile是一个样例,按需编写。

如下程序目录结构,

image

dockerfile文件随同代码一同提交到git上。

第二步

在jenkins上配置git构建,如下, image

下面的分支一定要选择正确。构建时jenkins会到git服务器上下载最新的代码。在开发过程中经常会遇到同事说为什么我的构建内容不是最新的代码,就是因为git上不是最新的代码。这样做也时刻督促着那些不爱提交代码的同事主动提交代码。

第三步

在构建中添加构建步骤execute shell,如下

image

当jenkins从git上下载完最新的代码以后会在代码目录中逐行执行该命令,因此可以在这里进行docker image的build和pull、push等操作,如下完全代码,

# 构建docker image
docker build --no-cache=true -t 127.0.0.1:5000/rizal-server:${BUILD_NUMBER} . 
# 停止正在运行的容器
echo `docker stop rizal-server`
# 删除老的容器
echo `docker rm -v rizal-server`
# 运行容器
docker run -itd -p 8080:8080 --name=rizal-server 127.0.0.1:5000/rizal-server:${BUILD_NUMBER}

这个过程其实和其它的jenkins构建没有什么区别,只不过是增加了一个docker。

jenkins构建docker遇到的坑

一开始的方案是在一个虚拟机中部署docker,然后再docker中安装jenkins,用jenkins进行docker build,这种方式会报错,会出现说docker daemon找不到问题,详细的错误没有记录下来。后面开始将jenkins从docker中挪出来,都放在虚拟机上这问题就解决了。

使用jenkins持续构建、部署SpringBoot项目