前言
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle。
帮助文档:https://www.jenkins.io/zh/doc/book/
1、CI/CD是什么?
1.1、CI
CI(Continuous integration,中文意思是持续集成)是一种软件开发时间。持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。借用网络图片对CI加以理解。
1.2、CD
CD(Continuous Delivery, 中文意思持续交付)是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的Staging环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境。下图反应的是CI/CD 的大概工作模式。
2、jenkins的下载与安装
2.1、下载
https://github.com/jenkinsci/jenkins/tags
2.2、安装
运行命令:java -jar jenkins.war --httpPort=8888
打开浏览器进入链接
http://localhost:8888
3、创建Java Springboot项目
3.1、创建项目shell
勾选 :Create Git repository
3.2、配置Maven
寻找路径: File -> Settings -> Build,Execution,Deployment -> Build Tools -> Maven
3.3、查看项目shell结构
.mvn: 包含maven信息
src: 源代码
ShellApplication.java: Springboot启动类
resources: 资源目录,存放application.yaml / application.properties,静态资源等
pom.xml: maven配置文件
3.4、在启动类增加日志
package com.company.shell; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class ShellApplication { public static void main(String[] args) { SpringApplication.run(ShellApplication.class, args); System.out.println("项目启动成功!!!"); } }
3.4.1、创建ShellController,方便浏览器验证服务
package com.company.shell.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; import java.util.Map; /*** * @title ShellController * @desctption Shell 控制器 * @author Kelvin * @create 2023/6/13 18:34 **/ @RestController public class ShellController { @GetMapping("/index") public Map welcome() { Map map = new HashMap(); map.put("code" , 200); map.put("message" , "欢迎"); return map; } }
3.5、本地打包,确保部署的项目是无错误的
打包成功,控制台会显示:[INFO] Finished,在项目路径下,会有target文件夹生成,并能看到项目名-版本号.jar文件
3.6、本地打包无误后,可提交到gitlab/gitee/github等仓库
提交代码并选择自己的仓库地址
3.7、去 git仓库查看提交的代码
4、编写发布脚本
#从git仓库来取代码并编译 cd /home/service/sourcecode rm -rf ./* echo '从远程仓库来取最新代码' git clone -b dev-20230613 https://xxxxx@gitee.com/xxxx/shell.git #切换到代码的所在目录 cd shell #maven命令打包代码 mvn -U package #备份文件 if test -e /home/service/app/shell-0.0.1-SNAPSHOT.jar then mv -f /home/service/app/shell-0.0.1-SNAPSHOT.jar /home/service/backup/ fi cp -f /home/service/sourcecode/shell/target/shell-0.0.1-SNAPSHOT.jar /home/service/app/ #如果java已经启动,则杀死 process=ps -ef | grep shell-0.0.1-SNAPSHOT.jar | grep -v grep | awk 'NR==1 {print $2}' if test -n "$process" then echo "准备杀死进程:"$process"" kill -9 $process echo "已经杀死进程:"$process"" fi #启动jar包 echo '重新启动shell-0.0.1-SNAPSHOT.jar' nohup java -jar /home/service/app/shell-0.0.1-SNAPSHOT.jar >>/dev/null 2>&1 & echo 'shell-0.0.1-SNAPSHOT.jar自动完毕'
5、jenkins通过脚本运行项目
jenkins通过脚本运行项目,最后在浏览器可以访问到部署的服务,即算Jenkins CICD流程整合成功。