【玩转Docker容器 7】基于Docker安装Jenkins实现自动化构建、部署、监控项目
@TOC
推荐个人Docker文章,讲的非常详细
【玩转Docker容器 1】Dockerd的详解及安装【玩转Docker容器 2】基于Docker一分钟搭建完 Jdk、Mysql、Nginx、Redis、Tomcat环境
【玩转Docker容器 3】基于Docker部署SpringBoot项目
【玩转Docker容器 4】基于Docker搭建Docker私服,以及如何使用Docker私服详解
【玩转Docker容器 5】基于Docker搭建Maven私服,以及项目如何使用Maven私服详解
【玩转Docker容器 6】基于Docker构建GitLab管理代码
【玩转Docker容器 7】基于Docker安装Jenkins实现自动化构建、部署、测试、监控项目
什么是Jenkins
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,它用Java语言编写而成,可持续集成、自动的构建/测试软件项目、监控外部任务的运行的web界面的平台
CI/CD是什么
CI(Continuous integration),中文意思是持续集成,是一种软件开发时间。持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。
CD(Continuous Delivery), 中文意思持续交付,是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的Staging环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境。
Jenkins的特点
1、开源的java语言开发持续集成工具,支持CI,CD;
2、易于安装部署配置:可通过yum安装,通过docker容器等快速实现安装部署,可通过web界面配置管理;
3、消息通知及测试报告:集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知,生成JUnit/TestNG测试报告;
4、分布式构建:支持Jenkins能够让多台计算机一起构建/测试;
5、文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等;
6、丰富的插件支持:支持扩展插件,你可以开发适合自己团队使用的工具,如git,svn,maven,docker等。
7、支持项目持续监控,日志输出
使用Docker 安装jenkins
1 使用docker 安装jenkins
输入下载(有可能比较久)
# docker run -d -p 8080:8080 -p 50000:50000 -v jenkins_data:/var/jenkins_home jenkinsci/blueocean
复制代码
2 访问jenkins所在的IP地址加上8080端口
注意关闭8080防火墙 注意:第一次启动的时候正在加载jenkins大概会等待3-10分钟。出现下图即可
3 解锁jenkins
进入jenkins容器 查看密码
# docker ps
# docker exec -it 容器id /bin/bash
# cat /var/jenkins_home/secrets/initialAdminPassword
复制代码
输入上面复制的解锁密码 点击安装推荐插件 等待完成就好了 大概需要等待3-10分钟
4 创建新的用户
自己输入填完
点击开始使用
出现下图就成功了
Jenkins全局工具配置
1 配置JDK
进入jenkins容器 查看java环境安装地址
# docker ps
# docker exec -it 容器id /bin/bash
# echo $JAVA_HOME
复制代码
在点击 找到jdk添加,别名随便写,这个JAVA_HOME就是自己查询出来的JDK路径 填写完点击保存
2 配置Maven
Maven的话就选择直接点击自动安装就好了
3.配置项目Maven插件
上面不是配置了Maven插件吗,那是不一样的,上面那个是全局的Jenkins的Maven插件,我这里是需要配置项目的Maven插件,现在的项目基本都Maven项目,所以需要部署时联网下载。
搜索插件名称:
Maven Integration
复制代码
在选择安装后重启
等待完成就OK啦
使用Jenkins自动打包SpringBoot项目
1 新建一个SpringBoot项目
我只勾选了WEB开发 添加这一点点代码
package com.example.demo.api;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestApi {
@RequestMapping("/test")
public String test(){
System.out.println("基于Docker安装Jenkins实现自动化构建、部署、测试、监控项目");
return "基于Docker安装Jenkins实现自动化构建、部署、测试、监控项目";
}
}
复制代码
端口号:5656 运行访问看看:
2 上传项目至GitLab
使用git上传,或者使用IDEA上传,或者Eclipse上传到GitLab上
我自己是找到项目地址使用Git打开git bash输入命令上传的
不懂看这篇文章,搭建、上传、下载过程都有: 【玩转Docker容器 6】基于Docker构建GitLab管理代码
整个项目打包上来:
3 Jenkins实现Springboot项目自动部署
1 新建一个发布任务
选择Maven项目,在点击确定
注:如果没有Maven选项的话,就是 没有完成上面:3 配置项目Maven插件这一步骤.
2 配置任务git地址和账号密码
上面那一步骤完成后,往下移,找到源码管理,点击Git 配置里面的地址参数 把上面的复制下来:http://120.77.0.58/root/springboot_test.git
我这里加了有点不一样,我加上了端口号,因为我服务器80端口未打开,我就使用了我GitLab的端口号,如果防火墙开发了80端口就不需要加上端口号 在配置用户名密码: ID和描述可以不需要填,只需要填写正确的地址和用户名密码就行了 还未完成 还未完!
3 配置项目自动打包
接着往下移找到Build
填写
clean install
复制代码
在点击保存 完成后,在点击立即构建 在点击左下角 选择控制台,即可查看打包的日志 下面是成功的样子: 第一次构建可能耗时比较长,因为需要下载一些相关依赖jar包
结尾出现:Finished: SUCCESS 代表成功
结尾出现:Finished: FAILURE 代表失败
复制代码
注意如果报错:ERROR: Maven JVM terminated unexpectedly with exit code 137 问题原因:因为maven设置的内存不足,也就是服务器内存不足,运行内存不足,可以输入top命令把大的进程给关了:TOP命令详解
4 找到Jenkins打包的项目位置
Jenkins打包的项目是在Docker中Jenkins容器内,要找到打包的项目必须进入容器才能查看
输入:
# docker ps
# docker exec -it 容器id /bin/bash
# cd /var/jenkins_home/workspace/springboot_test/target/
# ls
复制代码
上面的选项 4 就是打包成功的JAR包,这个包是可以直接在Docker容器内运行的,但是我们不要去容器内运行,我们要在可视化Jenkins中内实现打包后自动运行
使用Jenkins实现打包后执行shll脚本部署项目
1、选择项目 2、点击配置 3、往下移动找到Post Steps,选择添加Shall脚本 4、配置脚本 配置:(需要修改前面四个)服务名、Jar包名称、Jar包路径、Jar包路劲 建议重控制台输出去复制粘贴上来
#!/bin/bash
#服务名称,最好和项目名称一致
SERVER_NAME=springboot_test
# 源jar路径,mvn打包完成之后,target目录下的jar包名称,也可选择成为war包,war包可移动到Tomcat的webapps目录下运行,这里使用jar包,用java -jar 命令执行
JAR_NAME=demo-0.0.1-SNAPSHOT
# 源jar路径
JAR_PATH=/var/jenkins_home/workspace/springboot_test/target/
JAR_WORK_PATH=/var/jenkins_home/workspace/springboot_test/target/
echo "查询进程id-->$SERVER_NAME"
PID=`ps -ef | grep "$SERVER_NAME" | awk '{print $2}'`
echo "得到进程ID:$PID"
echo "结束进程"
for id in $PID
do
kill -9 $id
echo "killed $id"
done
echo "结束进程完成"
#复制jar包到执行目录
echo "复制jar包到执行目录:cp $JAR_PATH/$JAR_NAME.jar $JAR_WORK_PATH"
cp $JAR_PATH/$JAR_NAME.jar $JAR_WORK_PATH
echo "复制jar包完成"
cd $JAR_WORK_PATH
#修改文件权限
chmod 755 $JAR_NAME.jar
#如果要设置后台启动方式的话,修改底下为:BUILD_ID=dontKillMe nohup java -jar $JAR_NAME.jar &
java -jar $JAR_NAME.jar
复制代码
5、保存完了后点击:立即构建:
成功!
配置Docker容器映射外网访问
输入:
# docker ps
# docker exec -it 容器id /bin/bash
# cd /var/jenkins_home/workspace/springboot_test/target/
# ps
复制代码
发现已经配置完成,
但是外网访问不了,就算关闭了防火墙也访问不了,需要重新映射Docker中的Jenkins容器的端口号
1 配置Jenkins容器映射端口号
1.重启容器
输入:
systemctl restart docker
复制代码
2.清空未运行的容器
输入:
docker run -d -p 8080:8080 -p 5656:5656 -p 50000:50000 -v jenkins_data:/var/jenkins_home jenkinsci/blueocean
复制代码
5656端口号是我的项目端口号
2 重新构建项目
等待重启完成,在次点击立即构建
等待构建完成即可
外网访问测试
输入:IP地址+端口号+接口路径
完成!
何为自动化部署项目
1、现在的项目输入是这样的: 2、修改源代码
3.使用Git重新提交项目 4.点击关闭,在点击构建 5.在此访问查看 成功!