Docker+Jenkins搭建SpringBoot自动化部署
![7f922a9169f230bd4516324f151f9851.png](https://i-blog.csdnimg.cn/blog_migrate/8ac698a5c758c368c61ec9c161c038fd.jpeg)
jenkins
一、liunx安装Docker
1.yum包更新到最新
sudo yum update
2.安装需要的软件包
sudo yum install -y yum-utils device-mapper-persisten-data lvm2
3.设置yum源为阿里云
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4.安装docker
sudo yum install docker-ce
5.安装后查看docker版本
docker -v
6.设置开机启动
systemctl enable docker
二、使用Docker安装Jenkins
1.搜索jenkins镜像
docker search jenkins
结果:
![f7b3518a573bb00a1de99a0f0d39e178.png](https://i-blog.csdnimg.cn/blog_migrate/b75497b6bcabdfe7e468f71f10633c63.jpeg)
docker搜索jenkins
这里使用的是第二个镜像(因为第一个镜像的docker版本较低)
2.拉取镜像
docker pull jenkins/jenkins
3.创建文件夹
mkdir /home/jenkins
4.查看文件权限,给uid为1000的权限
ls -nd jenkins/
chown -R 1000:1000 jenkins/
5.创建并启动容器
docker run -itd -p 9090:8080 -p 50000:50000 --name jenkins --privileged=true -v /home/jenkins:/var/jenkins_home jenkins/jenkins:latest
6.之后浏览器输入 http://你的ip地址:9090
进入之后需要输入密码,在命令行使用如下命令获取密码
cat /home/jenkins/secrets/initialAdminPassword 查看密码
之后会进入jenkins安装插件页面,
这里选择安装推荐插件就可以了;
接下来就是进入jenkins首页,这里使用前需要配置一些基础的maven和jgit
(因为服务器已经安装jdk,这里不需再配置;配置git是为了从git拉取最新代码,配置maven是进行项目的打包;如果这里没有git和maven,需要进入插件管理下载后重启即可)
(如果安装失败,查看失败原因并根据原因安装其他插件先)
![156739c57cb5eade584c6ac510f483e2.png](https://i-blog.csdnimg.cn/blog_migrate/e3eb905d77413d45e299238d16b2983a.jpeg)
配置
![b78e65ce9918258d0ca8cc8e26ea94c1.png](https://i-blog.csdnimg.cn/blog_migrate/94dee74b06ebca60263fdf6a4debfd94.jpeg)
添加插件
![598de19f3830c90f65005cf4104424ea.png](https://i-blog.csdnimg.cn/blog_migrate/e70509871981c9416478872673d80656.jpeg)
搜索安装插件
7.进入系统设置,设置项目部署的服务器SSH
![3c6a15b7e944c2e94540983b5783860e.png](https://i-blog.csdnimg.cn/blog_migrate/9d9e8bcc1f40ad46ca742c20ca7b892b.jpeg)
系统设置1
![8a362f11e6bd5de9ac753e945a691bb3.png](https://i-blog.csdnimg.cn/blog_migrate/743a761ecc92994c1c93ce7c0d7faebc.jpeg)
系统设置2
![5048764e0412ec828363ec640cef28fb.png](https://i-blog.csdnimg.cn/blog_migrate/2fd47d7158f0cf96e2628643f03a2d41.jpeg)
系统设置3
![75c7df6004756e1f3f19c4e213922089.png](https://i-blog.csdnimg.cn/blog_migrate/c4cf25c42673a4615215e28622ab68e9.jpeg)
三、部署SpringBoot项目
1.新建任务
![99d05e46a28a7960ff79b2e900656781.png](https://i-blog.csdnimg.cn/blog_migrate/e9a6de1491270f5e2da415fcf6e0206e.jpeg)
创建jenkins任务1
![b0b67ded7ae1337ceb35832944aff0bd.png](https://i-blog.csdnimg.cn/blog_migrate/348a03db91c1361d6df612c2215e7f34.jpeg)
创建jenkins任务2
2.配置参数
添加ssh server
填写以下内容
![8e405f78a18547f862779d3aa04fd35a.png](https://i-blog.csdnimg.cn/blog_migrate/8ab2cb94245296e57102b3efc010fd32.jpeg)
配置参数1
![38978f66e8d4c4b9e69870364f99c0ec.png](https://i-blog.csdnimg.cn/blog_migrate/019f8be009d89961a955b00936601cad.jpeg)
配置参数2(配置git)
![8792047b6cb33b2af8d7156dce781f13.png](https://i-blog.csdnimg.cn/blog_migrate/3b0a4375437246af1312884ff0327407.jpeg)
配置参数3(打印构建日志)
![01ec07449d8434e049335e14791e6536.png](https://i-blog.csdnimg.cn/blog_migrate/80d6f0dfcc13324715fbd7fdb1e24e4a.jpeg)
配置参数4(maven操作)
(这里是maven的打包操作,clean package -Dmaven.test.skip=true -Ptest 意思是删除旧包,并且忽略test打新包,拉取的代码会在服务器的/home/jenkins/workspace/springboot01中)
新建一个任务这里会多一个文件夹,打完的jar包会在target目录中
![8f1f0b154d20c9d497e84cf1e32fc171.png](https://i-blog.csdnimg.cn/blog_migrate/5c525bb50cd2702712a9afe65e2bdee8.jpeg)
任务目录
![2eb43c1c376c673bcaef53cb0527c88e.png](https://i-blog.csdnimg.cn/blog_migrate/1e9f31093970a68cde0cc3eb5c77f039.jpeg)
配置参数4(SSH)
![7bc654f7141feb55974972b55e4e8b60.png](https://i-blog.csdnimg.cn/blog_migrate/505656255573aeb1b6c089bad0f1c81c.jpeg)
配置参数5(SSH Server)
脚本内容:
DATE=$(date +%Y%m%d)export JAVA_HOME PATH CLASSPATHJAVA_HOME=/usr/jdk1.8.0_201PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATHCLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATHDIR=/javapro/springbootJARFILE=01-springboot-web-0.0.1-SNAPSHOT.jarif [ ! -d $DIR/backup ];thenmkdir -p $DIR/backupficd $DIRps -ef | grep $JARFILE | grep -v grep | awk '{print $2}' | xargs kill -9mv $JARFILE backup/$JARFILE$DATEmv -f /home/jenkins/workspace/springboot01/target/$JARFILE /javapro/springboot/$JARFILEjava -jar $JARFILE > out.log &if [ $? = 0 ];thensleep 30tail -n 50 out.logficd backup/ls -lt|awk 'NR>5{print $NF}'|xargs rm -rf
脚本的操作就是,将旧包备份、杀掉项目运行的进程、将新打的包移动到项目目录、运行新包
![db7de441e908ee8eadc7a487d83ff205.png](https://i-blog.csdnimg.cn/blog_migrate/c6b407d963dd7192288056a029f14ec1.jpeg)
脚本
配置结束,应用保存退出
3.点击立即构建
![b9f967feeaf550247675fcc3bc09b57a.png](https://i-blog.csdnimg.cn/blog_migrate/a242cf26d5ab08cefbd5037e7fcdd6d4.jpeg)
构建项目
查看构建日志:
![ae3d09f26af678073f95862e7b6ee66d.png](https://i-blog.csdnimg.cn/blog_migrate/730703e0f36382a8d2589c32055bf0fb.jpeg)
查看构建日志1
![6c16b777363d885a30726914693b806b.png](https://i-blog.csdnimg.cn/blog_migrate/6264b29f9981f340a83f4da257f1b58e.jpeg)
查看构建日志2
![4d495346a54af2a63fbe2811fa27a62b.png](https://i-blog.csdnimg.cn/blog_migrate/43ceb19115790e1bd98bf61407b90d4b.jpeg)
查看构建日志3
、后续操作
部署成功后,git更新代码后只需要在jenkins点击构建,即可完成新代码的部署。
注意:一些常见的构建失败的问题
一:问题1:运行脚本没有权限:
![238de2d7f2900eea27078f02c286bce0.png](https://i-blog.csdnimg.cn/blog_migrate/224e536c16c86991b366a5df266d6ef3.jpeg)
运行脚本没有权限
解决方案:执行授权
![62a09838c48779aaf500a793e5d07220.png](https://i-blog.csdnimg.cn/blog_migrate/c990f691ca4bcf7bb051efb61bd4bc2f.jpeg)
给脚本授权
二、问题2
Maven JVM terminated unexpectedly with exit code 137
![f9518de90c38b5ba26b63dca581942cd.png](https://i-blog.csdnimg.cn/blog_migrate/dcfae344ac98b63ce47fe3b5d54eee07.jpeg)
Maven JVM terminated unexpectedly with exit code 1
原因:服务器内存不足
解决方案:停止一些进程,或服务器提升内存