这篇博客的目的实现:使用jenkins从git仓库拉取java项目代码,并打成jar,然后在jenkins把jar包运行在docker容器里
(重点:有了这套自动化部署,不用再跑到服务器上打包上传,使用命令运行项目了。而是直接上传代码到git仓库,然后登录jenkins点击构建,项目便发布成功)
准备工作:
1、在CentOs7服务器上安装好jenkins (怎么安装请看之前的博客:https://www.cnblogs.com/spll/p/10020597.html)
2、在jenkins上做好全局配置jdk和maven (怎么配置,请看之前的博客:https://www.cnblogs.com/spll/p/9935891.html)
(需要注意:我本来想用docker安装jenkins,并运行jenkins,奈何在jenkins里配置jdk和maven总是配置不上,百度了其他博客后发现docker运行的jenkins容器确定配置起来好麻烦,所以才用服务器直接安装jenkins,这样配置起jdk和maven来确实方便多了)
接下来进入正题:
借鉴博客:https://www.cnblogs.com/sxdcgaq8080/p/10599166.html
一、jenkins上jdk和maven都配置好了,直接新建任务,输入名称,选择下面的构建一个maven项目
二、在任务配置页面,源码管理这配置git,我的git仓库地址用的码云,连接的账号密码在下面添加一个就行
三、如果maven配置好了,Build这里直接填上pom.xml,clean package
四、在配置Post Steps这里输入一行shell命令,这个命令执行了一个shell命令文件:dockerRun.sh,这个脚本文件里的目的就是通过shell命令把jenkins构建时生成的jar包移动到我们指定的目录,然后在指定目录里根据此jar包创建docker的镜像,然后运行命令创建容器并启动
4.1、dockerRun.sh文件我放在/home/javaProject目录下,此目录下需要两个文件,一个dockerfile用来生成docker镜像,另一个就是dockerRun.sh脚本命令文件,如下:
4.2、创建dockerfile文件:vi dockerfile,并内容如下:
FROM java:8 VOLUME /tmp Add test01.jar test01.jar EXPOSE 8080 ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/test01.jar"]
add test01.jar test01.jar 第一个jar是当前所在目录下的项目jar包,第二个是重命名
4.3、创建dockerRun.sh脚本文件内容如下:
#===================================================================================== #=================================1、定义初始化变量====================================== #===================================================================================== #操作/项目路径(Dockerfile存放的路径) BASE_PATH=/home/javaProject #项目名称 SERVER_NAME=test01 #获此项目的取容器id CID=$(docker ps -a | grep -w "$SERVER_NAME" | awk '{print $1}') #获取此项目的镜像id IID=$(docker images | grep -w "$SERVER_NAME" | awk '{print $3}') #===================================================================================== #=========================2、移动jenkins已经构建好的jar包到Dockerfile所在目录========================= #===================================================================================== # 查找源jar文件名,进行重命名,最后将源文件移动到Dockerfile文件所在目录 function transfer(){ echo "=========================>>>>>>>移动jenkins构建好的jar到Dockerfile所在目录,并重命名为test01.jar" mv /var/lib/jenkins/workspace/test01/target/jz-project-0.0.1-SNAPSHOT.jar /home/javaProject/test01.jar echo "=========================>>>>>>>迁移完成Success" } #===================================================================================== #==================================3、构建最新镜像======================================= #===================================================================================== # 构建docker镜像 function build(){ #无论镜像存在与否,都停止原容器服务,并移除原容器服务 echo "=========================>>>>>>>停止$SERVER_NAME容器,CID=$CID" docker stop $CID echo "=========================>>>>>>>移除$SERVER_NAME容器,CID=$CID" docker rm $CID #无论如何,都去构建新的镜像 #构建新的镜像之前,移除旧的镜像 if [ -n "$IID" ]; then echo "=========================>>>>>>>存在$SERVER_NAME镜像,IID=$IID" echo "=========================>>>>>>>移除老的$SERVER_NAME镜像,IID=$IID" docker rmi $IID echo "=========================>>>>>>>构建新的$SERVER_NAME镜像,开始---->" echo "=========================>>>>>>>构建新的$SERVER_NAME镜像,完成---->" else echo "=========================>>>>>>>不存在$SERVER_NAME镜像,构建新的镜像,开始--->" cd $BASE_PATH docker build -t $SERVER_NAME . echo "=========================>>>>>>>构建新的$SERVER_NAME镜像,结束--->" fi } #===================================================================================== #==============================4、最后运行docker容器,启动服务=============================== #===================================================================================== # 运行docker容器 # 先备份老的jar包 # 再移动新的jar包到Dockerfile文件所在目录 # 接着,构建新的镜像 # 最后运行最新容器,启动服务 function run(){ transfer build docker run -d --restart=always --name $SERVER_NAME -v /usr/local/apps/docker-demo/logs:/home/javaProject/logs -p 8080:8080 $SERVER_NAME } #入口 run
如此一个构建任务的所有配置就算弄好了。。。
保存后点构建,控制台输出日志成功如下:完美,日志上也没报错信息
再看服务器,查看正在运行的容器:docker ps,成功如下:
打开浏览器访问服务器地址,成功如下:
。。。