《项目实战》 Jenkins 与 CICD、发布脚本

简介: 《项目实战》 Jenkins 与 CICD、发布脚本

前言

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流程整合成功。

浏览器地址:http://192.168.0.100:9000/index

目录
相关文章
|
6月前
|
jenkins 持续交付
Jenkins自动化部署脚本
Jenkins自动化部署脚本
63 0
|
5月前
|
Java jenkins 持续交付
Java项目jar包启动脚本,适用jenkins或定时任务或手动执行
Java项目jar包启动脚本,适用jenkins或定时任务或手动执行
332 3
|
3月前
|
jenkins 持续交付 网络安全
Jenkins Pipeline 流水线 - 完整构建 Pipeline Script 脚本
Jenkins Pipeline 流水线 - 完整构建 Pipeline Script 脚本
61 0
|
4月前
|
前端开发 jenkins 持续交付
不是Jenkins玩不起,而是脚本更有性价比,在1Panel中使用Node搭建前端自动化
不是Jenkins玩不起,而是脚本更有性价比,在1Panel中使用Node搭建前端自动化
159 2
|
jenkins Java 持续交付
实战:Docker+Jenkins+Gitee构建CICD流水线
实战:Docker+Jenkins+Gitee构建CICD流水线
|
jenkins Linux 网络安全
使用Jenkins通过SSH插件远程控制主机执行脚本
使用Jenkins通过SSH插件远程控制主机执行脚本
326 1
|
Ubuntu jenkins 程序员
让Jenkins执行GitHub上的pipeline脚本
将Jenkins的流水线脚本保存在GitHub上,让Jenkins从GitHub下载该脚本并执行
352 0
让Jenkins执行GitHub上的pipeline脚本
|
jenkins Linux 网络安全
使用Jenkins通过Publish Over SSH插件远程控制主机执行脚本
使用Jenkins通过Publish Over SSH插件远程控制主机执行脚本
206 0
|
jenkins Java 持续交付
Docker常用镜像的构建脚本及jenkins手动触发镜像构建
Docker常用镜像的构建脚本及jenkins手动触发镜像构建
|
小程序 IDE JavaScript
小程序结合Jenkins实现CICD
小程序结合Jenkins实现CICD
644 0