docker+jenkins实现spring boot项目持续集成自动化部署
一.首先jenkins与docker的安装参考下面链接
安装jenkins: https://www.cnblogs.com/jescs/p/7644635.html
二.Jenkins配置
1.打开jenkins构建一个maven项目,名字取为ms_backend.
2.填写jenkins配置
以上jenkins配置就完成了。
三.对docker的配置(重点,因为我把所有的配置都放在docker.sh中,也是出于安全的考虑)
1.进入云服务器中到项目的目录下即 /usr/ms_backend
2.在该目录下创建并编写Dockerfile文件
1 [root@iZuf635fwy8k6ubk6r9yonZ ms_backend]# vim Dockerfile 2 3 FROM hub.c.163.com/wuxukun/maven-aliyun:3-jdk-8 //下载maven与java的镜像 4 # 指定当前操作目录 5 WORKDIR /usr/ms_backend 6 #指定对外端口号 7 EXPOSE 8040 8 #启动java程序 9 #--spring.profiles.active=dev 多环境下指定环境 。 -c为清除以前启动的数据 10 ENTRYPOINT ["java","-jar","ms_backend.jar","--spring.profiles.active=dev","-c"]
3.创建配置docker.sh脚本
先看下jenkins构建后项目存放的路径,以便在docker.sh中用到
1 [root@iZuf635fwy8k6ubk6r9yonZ ms_backend]# vim docker.sh 2 #操作/项目路径(Dockerfile存放的路劲) 3 BASE_PATH=/usr/ms_backend 4 # 源jar路径 即jenkins构建后存放的路径( 5 6 ) 7 SOURCE_PATH=/var/lib/jenkins/workspace 8 #docker 镜像/容器名字或者jar名字 这里都命名为这个 9 SERVER_NAME=ms_backend 10 #容器id 11 CID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}') 12 #镜像id 13 IID=$(docker images | grep "$SERVER_NAME" | awk '{print $3}') 14 15 echo "最新构建代码 $SOURCE_PATH/$SERVER_NAME/target/ms_backend.jar 迁移至 $BASE_PATH ...." 16 #把项目从jenkins构建后的目录移动到我们的项目目录下同时重命名下 17 mv $SOURCE_PATH/$SERVER_NAME/target/ms_backend-0.0.1-SNAPSHOT.jar $BASE_PATH/ms_backend.jar 18 #修改文件的权限 19 chmod 777 /usr/ms_backend/ms_backend.jar 20 echo "迁移完成" 21 22 23 # 构建docker镜像 24 if [ -n "$IID" ]; then 25 echo "存在$SERVER_NAME镜像,IID=$IID" 26 else 27 echo "不存在$SERVER_NAME镜像,开始构建镜像" 28 cd $BASE_PATH 29 docker build -t $SERVER_NAME . 30 fi 31
32 # 运行docker容器 33 docker rm $SERVER_NAME //删除原来的容器 34 # --name docker-test 容器的名字为docker-test 35 # -d 容器后台运行 36 # -p 3636:3636 指定容器映射的端口和主机对应的端口都为3636 37 # -v /usr/ms_backend/:/usr/ms_backend/ 将主机的/usr/ms_backend/目录挂载到容器的/usr/ms_backend/ 目录中(不可少每次本地更新jar包重启容器即可,不用重新构建镜像 38 docker run --name $SERVER_NAME -v $BASE_PATH:$BASE_PATH -d -p 8040:8040 $SERVER_NAME 39 echo "$SERVER_NAME容器创建完成"
以上配置全部完成
四.构建的过程可能出现的问题
1.jenkins 启动 docker /usr/bin/docker-current: Got permission denied while trying to connect to the Docker daemon socket at
答:权限问题 。 需要把jenkins用户加入到dockerroot组中
2.containerd: start container” error=“oci runtime error: container_linux.go:247: starting container process caused “process_linux.go:245: running exec setns process for init caused \“exit status 17\””\n”
答:这个问题是因为linux内核版本的问题,运行dockerlinux内核版本应在3.10以上。所以需要升级linux内核
3.docker . Unable to access jarfile问题
需要在Dockerfile中指定目录
4.spring boot多环境配置方法
5.如果docker run 容器运行成功后立马意外退出exit(1)
可以通过docker logs 容器名称 。 查看日志,分析原因。
hello world!!!