CI/CD—Jenkins配置一次完整的jar自动化发布流程
背景:
实现设想:
要创建自动化发布,需要准备一台测试服务器提前安装好java运行所需的环境,JDK版本最好和Windows开发机器上的版本一致,在Jenkins上配置将构建好的jar上传到测试服务器上,测试服务器自动启动构建好的jar,这些步骤只需要在Jenkins完成相关的配置即可。
一、环境准备
1、在测试机器上安装java运行环境
#解压
tar -zxvf OpenJDK17U-jdk_x64_linux_hotspot_17.0.8.1_1.tar.gz#配置环境变量
vim /etc/bashrc
#在文件末尾追加
JAVA_HOME=/opt/devops/java
export PATH=${JAVA_HOME}/bin:${PATH}
2、创建测试用户
#创建用户用于代码测试,指定家目录为/opt/devops/test
useradd -m test -d /opt/devops/test#设置test用户密码等会Jenkins的SSH认证需要用到
passwd test
二、将IDEA代码提交到GitLab并在Jenkins上创建maven项目
步骤一:将IDEA上的代码提交到GitLab上
参考:
CI/CD—IDEA上提交代码到GitLab-CSDN博客
步骤二:配置Maven连接GitLab并构建jar
参考:
CI/CD—Jenkins配置Maven+GitLab自动构建jar包-CSDN博客
二、Jenkins上进行操作
1、在Jenkins上安装Publish Over SSH插件用于SSH认证
选择如下图示点击安装即可
2、 配置Publish Over SSH插件连接测试机器
2.1、选择系统管理 --> 系统配置
2.2、填写连接测试机器的信息
3、Post Steps设置
3.1、点击之前的构建的项目
3.2、选择Send files or execute commands over SSH选项
3.3、配置将Jenkins上生成的jar上传到测试服务器上的相关选项
如下正则匹配:匹配Jenkins构建生成家目录下target目录下的jar包
4、执行构建测试查看Jenkins下发的原理方便后续的配置
4.1、执行构建
4.2、观察传到测试服务器上jar包的目录结构
可以看到数据传上去之后还带有HelloWorld/target前缀,我们想要的结构就是将jar直接传到测试服务器家目录下不带有HelloWorld/target目录,如需要实现按照如下操作进行。
5、实现指定家目录、去掉Jenkins前缀、自动启动jar包的步骤
5.1、在Remove prefix中填写需要去掉的目录前缀
5.2、在Remote directory中填写Source files中配置的内容传输到家目录的具体哪个目录下
在Remote directory中填写java;表示将**/target/*.jar包传到/opt/devops/test/java目录下
6、Exec command配置测试服务器上执行的命令
#启动jar,因为jar包的版本会变所以使用通配符进行匹配java -jar /opt/devops/test/java/*.jar >> /opt/devops/test/java/logs/java.log &
7、测试服务器上查看Jenkins自动化发布的结果
7.1、查看前缀是否已经去掉
7.2、查看jar是否传送到/opt/devops/test/java目录下
7.3、查看命令行是否已经执行
7.4、对前端内容进行访问测试
在浏览器上输入:http://192.168.72.132:8989/hello,对前端进行验证
三、Jenkins调用测试服务器上的脚本执行复杂的任务
背景: 对jar进行构建前,测试机器上可能还运行着之前程序的进程或者有一些需要其他交互的场景,所以在进行构建之前应该要先将这些运行的进程等运行处理,再进行构建部署操作这样就确保了测试环境的稳定,在进行构建时也减少了因为环境问题导致自动发布失败等问题。
1、测试服务器上编写java服务启动脚本
#!/bin/bash
TIME=$(date +"%Y-%m-%d %H:%M:%S")
JAVA_PATH=/opt/devops/test/java
JAVA_LOG=${JAVA_PATH}/logs/java.logJavaStart ()
{echo ">>>>>>>>>>>>>>>>>Java Starting:${TIME}<<<<<<<<<<<<<<<<<<<
" >> ${JAVA_LOG}PID_NUM=$(ps -ef|grep ${JAVA_PATH}/*.jar|grep java|grep -v grep|awk '{print $2}'|wc -l)if [ ${PID_NUM} -gt 0 ];thenPID=$(ps -ef|grep ${JAVA_PATH}/*.jar|grep java|grep -v grep|awk '{print $2}')echo "[WARING] 已经存在JAVA进程$PID,退出本次操作!!"echo "
[WARING] 已经存在JAVA进程:$PID,退出本次操作!!
" >> ${JAVA_LOG}exitelsejava -jar ${JAVA_PATH}/*.jar >>${JAVA_LOG} 2>>${JAVA_LOG} &sleep 3PID_NUM=$(ps -ef|grep ${JAVA_PATH}/*.jar|grep java|grep -v grep|awk '{print $2}')if [ ${PID_NUM} -eq 0 ];thenecho "[ERROR] JAVA Fail To Start!!!"echo "
[ERROR] JAVA Fail To Start!!!
" >> ${JAVA_LOG}elsePID=$(ps -ef|grep ${JAVA_PATH}/*.jar|grep java|grep -v grep|awk '{print $2}')echo "[INFO] JAVA-PID:${PID} Successfully Runing!!!"echo "[INFO] JAVA-PID:${PID} Successfully Runing!!!" >> ${JAVA_LOG}fifi
}
JavaStart
情况一:程序已经运行,执行此脚本会退出不再执启动命令,并将输出结果打印到日志中
情况二:java启动命令已经执行但是服务进程不存在启动失败
情况三:Java服务正常启动
2、测试服务器上编写java服务停止脚本
#!/bin/bash
TIME=$(date +"%Y-%m-%d %H:%M:%S")
JAVA_PATH=/opt/devops/test/java
JAVA_LOG=${JAVA_PATH}/logs/java.logMain ()
{PID_NUM=$(ps -ef|grep ${JAVA_PATH}/*.jar|grep java|grep -v grep|wc -l)if [ ${PID_NUM} -gt 0 ];thenPID_NUM=$(ps -ef|grep ${JAVA_PATH}/*.jar|grep java|grep -v grep|awk '{print $2}')kill -9 ${PID_NUM}echo "[INFO] JAVA-PID:${PID_NUM} Java Has Been Stopped!!!"if [ $? -eq 0 ];thenecho "
>>>>>>>>>>>>>>>>>Java Has Been Stopped:${TIME}<<<<<<<<<<<<<<<<<<<
" >> ${JAVA_LOG}fifi
}
Main
3、在Pre Steps中添加服务停止脚本
4、在Post Steps里也添加执行启动脚本的命令
5、测试结果
自动发布连接超时解决方法
Publish over SSH超时机制
连接超时可能是因为脚本或者文件在传送 过程中运行超时
相关文章:

CI/CD—Jenkins配置一次完整的jar自动化发布流程
背景: 实现设想: 要创建自动化发布,需要准备一台测试服务器提前安装好java运行所需的环境,JDK版本最好和Windows开发机器上的版本一致,在Jenkins上配置将构建好的jar上传到测试服务器上,测试服务器自动启动…...

Magento2根据图片文件包导入产品图片
图片包给的图片文件是子产品的图片,如下图:A104255是主产品的sku <?php/*** 根据图片包导入产品图片,包含子产品和主产品* 子产品是作为主图,主产品是作为附加图片*/use Magento\Framework\App\Bootstrap;include(../app/boot…...

从零开始的python学习(五)P71+P72+P73+P74
本文章记录观看B站python教程学习笔记和实践感悟,视频链接:【花了2万多买的Python教程全套,现在分享给大家,入门到精通(Python全栈开发教程)】 https://www.bilibili.com/video/BV1wD4y1o7AS/?p6&share_sourcecopy_web&v…...

OpenHarmony5.0分布式系统源码实现分析—软总线
一、引言 OpenHarmony 作为一款面向万物互联的操作系统,其分布式软总线(Distributed SoftBus)是实现设备间高效通信和协同的核心技术之一。分布式软总线通过构建一个虚拟的总线网络,使得不同设备能够无缝连接、通信和协同工作。本…...

基于SpringBoot实现旅游酒店平台功能六
一、前言介绍: 1.1 项目摘要 随着社会的快速发展和人民生活水平的不断提高,旅游已经成为人们休闲娱乐的重要方式之一。人们越来越注重生活的品质和精神文化的追求,旅游需求呈现出爆发式增长。这种增长不仅体现在旅游人数的增加上࿰…...

代码随想录算法训练营第六十一天 | 108. 冗余连接 109. 冗余连接II
108. 冗余连接 题目链接:KamaCoder 文档讲解:代码随想录 状态:AC Java代码: import java.util.*;class Main {public static int[] father;public static void main(String[] args) {Scanner scan new Scanner(System.in);int n…...

RoboVQA:机器人多模态长范围推理
23 年 11 月来自 Google Deepmind 的论文“RoboVQA: Multimodal Long-Horizon Reasoning for Robotics”。 本文提出一种可扩展、自下而上且本质多样化的数据收集方案,该方案可用于长期和中期的高级推理,与传统的狭窄自上而下的逐步收集相比,…...

TCP/IP原理详细解析
前言 TCP/IP是一种面向连接,可靠的传输,传输数据大小无限制的。通常情况下,系统与系统之间的http连接需要三次握手和四次挥手,这个执行过程会产生等待时间。这方面在日常开发时需要注意一下。 TCP/IP 是互联网的核心协议族&…...

Microsof Visual Studio Code 安装教程(中文设置)
VS Code 是一个免费的代码编辑器,可在 macOS、Linux 和 Windows作系统上运行。启动和运行 VS Code 既快速又简单。VS Code(全称 Visual Studio Code)是一款由Microsoft 推出的免费、开源、跨平台的代码编辑器,拥有强大的功能和灵活…...

python爬虫:Android自动化工具Auto.js的详细使用
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 1. Auto.js 简介2. 安装与配置2.1 安装 Auto.js2.2 安装 Python 环境2.3 安装 ADB 工具3. Python 与 Auto.js 结合3.1 通过 ADB 执行 Auto.js 脚本3.2 通过 Python 控制 Auto.js3.3 通过 Python 与 Auto.js 交互4. 常用…...

Unity DOTS从入门到精通之 自定义Authoring类
文章目录 前言安装 DOTS 包什么是Authoring1. 实体组件2. Authoring类 前言 DOTS(面向数据的技术堆栈)是一套由 Unity 提供支持的技术,用于提供高性能游戏开发解决方案,特别适合需要处理大量数据的游戏,例如大型开放世…...

linux 软件安装(上)
一、基础环境准备 1.1、安装VM 1.2、在VM上导入linux iso镜像,装好linux系统 华为centos镜像下载地址 https://mirrors.huaweicloud.com/centos/ https://mirrors.huaweicloud.com/centos/7.9.2009/isos/x86_64/ 网易centos镜像下载地址 htt…...

php虚拟站点提示No input file specified时的问题及权限处理方法
访问站点,提示如下 No input file specified. 可能是文件权限有问题,也可能是“.user.ini”文件路径没有配置对,最简单的办法就是直接将它删除掉,还有就是将它设置正确 #配置成自己服务器上正确的路径 open_basedir/mnt/qiy/te…...

【江协科技STM32】ADC数模转换器-学习笔记
ADC简介 ADC(Analog-Digital Converter)模拟-数字转换器ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁,ADC是一种将连续的模拟信号转换为离散的数字信号的设备或模块12位逐次逼近型…...

QT系列教程(20) Qt 项目视图便捷类
视频连接 https://www.bilibili.com/video/BV1XY41127t3/?vd_source8be9e83424c2ed2c9b2a3ed1d01385e9 Qt项目视图便捷类 Qt项目视图提供了一些便捷类,包括QListWidget, QTableWidget, QTreeWidget等。我们分别介绍这几个便捷类。 我们先创建一个Qt …...

git worktree的使用
git worktree 是 Git 提供的一个强大功能,允许你在同一个仓库中同时创建多个工作目录,每个目录对应一个分支,从而实现并行开发。以下是 git worktree 的常用命令和使用方法: 1. 创建新的工作目录(Worktree)…...

Spring Boot+RabbitMQ+Canal 解决数据一致性
目录大纲 一、环境配置1.1 docker-compose.yml 配置1.2 docker-compose 常用命令1.3 镜像服务启动状态 二、MySQL binlog 配置2.1 docker-compose command 配置 binlog2.2 创建canal用户,以及查看是否开启binlog 三、canal 相关配置文件3.1 canal.properties 完整文…...

Java高频面试之集合-08
hello啊,各位观众姥爷们!!!本baby今天来报道了!哈哈哈哈哈嗝🐶 面试官:详细说说CopyOnWriteArrayList CopyOnWriteArrayList 详解 CopyOnWriteArrayList 是 Java 并发包(java.util…...

C#实现高性能异步文件下载器(支持进度显示/断点续传)
一、应用场景分析 异步文件下载器用处很大,当我们需要实现以下功能时可以用的上: 大文件下载(如4K视频/安装包) 避免UI线程阻塞,保证界面流畅响应多任务并行下载 支持同时下载多个文件,提升带宽利用率后台…...

【数据分析】转录组基因表达的KEGG通路富集分析教程
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍差异分析(limma)KEGG富集分析(enrichKEGG)可视化加载R包数据下载导入数据基因差异分析火山图KEGG通路富集分析可视化通路结果另一个案例总结系统信息参考介绍 KEGG富集分析,可…...

【由技及道】API契约的量子纠缠术:响应封装的十一维通信协议(全局的返回结果封装)【人工智障AI2077的开发日志012】
摘要:在API通信的量子混沌中,30种返回格式如同平行宇宙的物理定律相互碰撞。本文构建的十一维通信协议,通过时空锚点(ApiResult)、量子过滤器(ResponseWrapper)和湮灭防护罩(Jackson…...

STM32 ——系统架构
3个被动单元 SRAM 存储程序运行时用到的变量 Flash(内部闪存存储器) 存储下载的程序 程序执行时用到的常量 桥接1和桥接2 AHB到APB的桥(AHBtoAPBx) 桥1 通过APB2总线连接到APB2上的外设。 高速外设,最高72MHz。 桥2 通过…...

算法 之 树形dp 树的中心、重心
文章目录 重心实践题目小红的陡峭值 在树的算法中,求解树的中心和重心是一类十分重要的算法 求解树的重心 树的重心的定义:重心是树中的一个节点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点…...

如何利用 Excel 表格实现精准文件批量重命名教程
在处理大量文件时,有时需要根据特定规则对文件名进行调整。如果您的文件名和新名称之间存在一对多的关系,并且这种关系可以通过 Excel 表格来管理,那么使用“简鹿文件批量重命名”软件中的“匹配对应名称命名”功能将是一个高效的选择。接下来…...

ACE协议学习1
在多核系统或复杂SoC(System on Chip)中,不同处理器核心或IP(Intellectual Property)模块之间需要保持数据的一致性。常用的是ACE协议or CHI。 先对ACE协议进行学习 ACE协议(Advanced Microcontroller Bu…...

【实战ES】实战 Elasticsearch:快速上手与深度实践-5.1.1热点分片识别与均衡策略
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 5.1.1 Filebeat Logstash ES Kibana 全链路配置实1. 架构设计与组件选型1.1 技术栈对比分析1.2 硬件配置推荐 2. Filebeat 高级配置2.1 多输入源配置2.2 性能优化参数 3.…...

Kubernetes 的正式安装
1.基础的网络结构说明 软件路由器 ikuai 当然同一个仅主机模式 相当于在 同一个我们所谓的广播域内 所以相当于它们的几张网卡 是被连接起来的 为了防止出现问题 我们可以把第二块网卡临时关闭一下 2.准备路由器 ikuai 爱快 iKuai-商业场景网络解决方案提供商 (ikuai8.com)…...

初阶数据结构(C语言实现)——4.2队列
目录 2.队列2.1队列的概念及结构2.2队列的实现2.2.1 初始化队列2.2.2 销毁队列2.2.3 队尾入队列2.2.4 队头出队列2.2.5获取队列头部元素2.2.6 获取队列队尾元素2.2.7获取队列中有效元素个数2.2.8 检测队列是否为空,如果为空返回非零结果,如果非空返回0 3…...

Mysql主从复制和Mysql高可用以及负载均衡配置
需要先配置MySQL主从复制,然后再在主MySQL服务器上配置MySQL Router。以下是详细说明和步骤: 1. 为什么需要先配置MySQL主从复制? MySQL主从复制是MySQL高可用性和负载均衡的基础,通过将数据从主服务器实时同步到从服务器&#…...

c#中使用时间戳转换器
在C#中,时间戳转换器通常用于将时间戳(通常是一个表示自某一特定时间点(如1970年1月1日UTC)以来的毫秒数的长整型值)转换为DateTime对象,或者将DateTime对象转换回时间戳。以下是几种实现这一功能的方法: 1. 使用DateTime的构造函数 将时间戳转换为DateTime long tim…...