Docker+Jenkins实现springboot项目发布
前言
我们在编写springboot项目在面临发布到测试环境或者其它非本地开发环境时,使用的全是java -jar之类的命令行,或者使用dockerfile进行镜像的生成而后在宿主机上使用docker run …命令运行一个docker容器,从而提供服务。上述的两种情况是最简便的发布方式,但是其中的繁琐也可想而知,那么有什么方式可以简化其中发布的步骤呢,可以持续进行发布项目,答案就是今天的Jenkis。
关于Jenkins
网上有很多关于Jenkins的介绍,这里我就不多阐述Jenkis到底有多强大,感兴趣的童鞋可以移步:link.
1.安装Jenkins
关于如何在本机安装,本文暂不给出方法,因为网上的资料很全,本文章介绍如何通过docker进行安装Jenkis。
在安装Jenkins之前,需要童鞋们的机器上已经安装了docker。在安装了docker之后只需要一条命令就可以在你的机器上跑上Jenkins:
docker run --name Jenkins -u root -d -p 8080:8080 -p 50000:50000 -v jenkins-data:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock --network bridge -v /etc/timezone:/etc/timezone -v /etc/localtime:/etc/localtime jenkinsci/blueocean
不出意外现在你的机器上就有一个Jenkis容器啦,恭喜你完成了第一步。现在访问对应的端口(127.0.0.1:8080)就可以看到Jenkis正在初始化的界面。
初始化完成之后,Jenkis需要你输入密码
注意:如果是在本机安装的Jenkis的话,直接在宿主机上执行:
cat /var/jenkins_home/secrets/initialAdminPassword
就可以获取对应的密码。但现在我们的Jenkis是跑在docker容器中的,所以我们需要执行
docker exec -it containerId /bin/bash
进入容器内部之后再执行上面查看密码的命令。
获得到密码之后,直接复制粘贴进输入框,点击继续。
这里我选择第一个安装推荐插件。选择了之后Jenkis会给你安装一些插件,这个过程完成后Jenkis会重新启动,等待一会之后
在这里你可以设置你的登录用户信息,密码自己记住就好。后面就直接下一步就好,完成之后就直接到了主页面,这个时候你就可以开始你的表演了。
2.安装插件
刚刚上面完成了docker Jenkis的安装,接下来我们就需要开始干正事了,那就是如何发布一个springboot项目呢?首先我们得安装几个插件才可以。
注:作者这里的Jenkis版本,里面是没有docker,maven等相关插件的,因为一开始安装插件是系统推荐的。
2.1安装maven插件
步骤:系统管理—>插件管理---->可选插件
搜索maven,选择下面这个插件进行安装
2.2安装docker插件
搜索docker,选择下面这些插件进行安装
选择安装之后,系统会进行安装你所选的插件,随后重启Jenkis。
3.配置软件
这个步骤是可选的,主要根据你的项目的JDK版本,Maven版本来决定。因为作者这里使用的jdk版本是jdk11,maven版本是maven3.8.1,所以需要重新安装这些软件。
3.1配置maven
步骤:系统管理—>全局工具配置---->maven安装
这里有很多版本,选择你项目中使用的版本即可。
3.2配置jdk
jdk安装有很多种方式,比如从Oracle安装:
但因为这里没有作者想要的jdk11版本的jdk,所以我选择了安装openjdk:
大家可以从这个地址获取到飞速的openjdk下载地址:openjdk: link.
选择你需要的jdk,然后将链接复制到上面的下载URL地址栏中。
随后点击应用,然后保存就好了。
4.配置项目
终于终于到了干正经事的时候啦,我们要把我们的springboot项目通过Jenkis发布跑起来,看到这里的童鞋可以给自己鼓个掌哈。加油加油!!!
4.1新建任务
回到jenkis主页,然后点击新建任务按键,进入新建任务的页面
这里我们选择构建一个maven项目。PS:因为作者是用maven来管理项目的。然后给你的任务取个名字,比如:xxx管理系统后端服务之类的。然后点击确定。
4.2配置项目
在上一步点击了确定之后,我们就到了配置项目的页面,在这里我们可以配置我们的源码地址用于定时构建或者触发构建,配置我们的maven build的参数,还有一些前置步骤和后置步骤的东东了,本文就以最简单细致的方式让大家能够跟着作者完成自己的Jenkis部署,所以涉及到的一些高级的功能,比如上面说的定时构建和触发构建,就留给大家去摸索,我暂时就不带大家去实践了,毕竟只有自己摸索过一遍之后,这些知识才能真正进入自己的脑袋。
这里我们填写自己的GIT项目地址,注意,下面的Credentials需要你去新增一个用于git项目验证的用户和密码。填写完之后,稍微等一下,Jenkis会自动去校验你所填写的git地址和Credentials是否正确,如果下面出现一堆红色的东东,就需要你自己检查一下你的git地址和Credentials是否是正确的。像作者这样说明是成功的。
随后我们就来到构建触发器这一步,这一步就是需要你做一些前置的工作了,比如作者是用docker跑的springboot项目,那么在重新构建项目的时候,我就需要把以前的容器和镜像清理一波。
#!/bin/bash
echo "stop old docker container"
docker stop xxx
echo "delete old docker container"
docker rm xxx
echo "delete old docker images:"
docker rmi xxx:latest
echo "clean success"
然后就是Build步骤
这里我们选择root pom.xml
然后在Goals and options 填入你在打包的时候需要执行的命令参数,比如我们在本地开发的时候是这么执行的:
mvn clean package -Dmaven.test.skip=true -P test
所以类似的我们在Goals and options 填入 clean package -Dmaven.test.skip=true -P test
就好了。
接下来就是Post Steps阶段了,因为上面的pre steps 和 build 环节我们都把我们的环境清理了一下,也把我们的jar包都打好了,接下来就是根据上面的东西进行真正的构建和发布了。
首先我们是使用docker来运行我们的程序的,所以第一步就是让docker根据我们程序里的dockerfile构建我们新的镜像(PS:这里插一句啊,如果不了解docker的可以去菜鸟教程上学一下docker基本使用,这里不做讲解哈。)
上面的步骤完成后,就来到了最后一步了,也就是把我们构建好的镜像运行起来,当然,这一步也还是通过脚本的方式去做。如下图所示:
脚本:
#!/bin/bash
echo "current docker images:"
docker images | grep xxx
echo "start container----->"
docker run xxx
echo "start success!"
不出意外的话,我们就会看到Jenkis在快速的帮我们构建的我们应用,最终效果是这样的:
当当当当!恭喜你,你已经使用docker+jenkis半自动化的部署了一个springboot的应用啦。为什么说是半自动呢,因为我们跳过了使用Git实现触发构建或者定时构建的功能,所以,我们在每次提交代码的时候,还是需要到Jenkins中选择对应的任务(项目)点击立即构建来重新构建我们的应用,使得刚刚提交的代码能够更新我们的应用程序。但总体来说会比手动去打jar包,然后登陆到服务器上,kill掉当前的应用程序,上传jar包,再重新java -jar…要方便亿点。
5.可能遇到的问题
其实程序员就是每天生活在问题之中,有些问题能Google的到,但是很多问题其实还是需要自己去刨根的,大部分应用在出错时,错误信息都很明确,如果你确实没法看出来是什么错误,建议先上对应的官网去找找,然后再去Google,那样你自己才会对这样的问题更加深刻,而不会一遍一遍的去Google重复的问题。
作者之所以把可能遇到的问题放在最后,就是想大家能够在自己实践的时候出了问题能够靠自己的聪明的小脑袋瓜去找到解决方案。
那我们就来看看使用docker+Jenkins部署应用的时候会遇到哪些问题吧。
5.1jdk找不到的问题
由于前面是我们自己安装的jdk到Jenkins_home里面的,所以在构建应用的时候,会出现这样的问题:
这是因为我们通过url链接让Jenkins自己去UNpacking下载下来的jdk的压缩包,所以解压出来的目录结构是会多包含一层目录的(比如:openjdk_11_xxxx),所以这里Jenkins去/var/jenkins_home/tools/hudson.model.JDK/jdk11/bin
目录下去找java可执行文件是找不到的,所以我们要把openjdk_11_xxxx目录去掉,可以使用cp -r 的命令把openjdk_11_xxxx目录里的文件拷贝到/var/jenkins_home/tools/hudson.model.JDK/jdk11
里面,然后删除/var/jenkins_home/tools/hudson.model.JDK/jdk11/
里面的openjdk_11_xxxx(这是openjdk解压后的目录),这样子Jenkins去找的时候就能正确找到java啦。
5.2docker URI 错误的问题
前面在安装docker插件的时候,作者并没有把docker的相关配置给贴出来,这会导致一个docker URI找不到的问题:
所以我们要去配置一下我们的docker路径,因为我们宿主机上安装了docker,所以只需要把docker的.sock文件指定一下就好,但如果是想在远程的机器上执行呢?这个问题就留给聪明的你解决吧。我们先看看在本机上如何解决这个问题吧。
步骤:系统管理—>系统配置—>Cloud
点击 The cloud configuration has moved to a separate configuration page进入如下界面,在
Docker Host URI这一栏填入unix:///var/run/docker.sock
,之后别忘记测试一下是否连接成功哈。
结束语
感谢大家能够耐着性子看完,整篇文章全是作者一个字一个字码出来的,图也是作者一个一个的截,还要手动马赛克,作者本人也是才疏学浅,其中有些地方写的不对的,还望各位大佬能够多多批评指正。谢谢大家的支持!也欢迎大家转发!