当前位置: 首页 > news >正文

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自动化发布流程

背景&#xff1a; 实现设想&#xff1a; 要创建自动化发布&#xff0c;需要准备一台测试服务器提前安装好java运行所需的环境&#xff0c;JDK版本最好和Windows开发机器上的版本一致&#xff0c;在Jenkins上配置将构建好的jar上传到测试服务器上&#xff0c;测试服务器自动启动…...

Magento2根据图片文件包导入产品图片

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

从零开始的python学习(五)P71+P72+P73+P74

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

OpenHarmony5.0分布式系统源码实现分析—软总线

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

基于SpringBoot实现旅游酒店平台功能六

一、前言介绍&#xff1a; 1.1 项目摘要 随着社会的快速发展和人民生活水平的不断提高&#xff0c;旅游已经成为人们休闲娱乐的重要方式之一。人们越来越注重生活的品质和精神文化的追求&#xff0c;旅游需求呈现出爆发式增长。这种增长不仅体现在旅游人数的增加上&#xff0…...

代码随想录算法训练营第六十一天 | 108. 冗余连接 109. 冗余连接II

108. 冗余连接 题目链接&#xff1a;KamaCoder 文档讲解&#xff1a;代码随想录 状态&#xff1a;AC Java代码&#xff1a; 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”。 本文提出一种可扩展、自下而上且本质多样化的数据收集方案&#xff0c;该方案可用于长期和中期的高级推理&#xff0c;与传统的狭窄自上而下的逐步收集相比&#xff0c…...

TCP/IP原理详细解析

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

Microsof Visual Studio Code 安装教程(中文设置)

VS Code 是一个免费的代码编辑器&#xff0c;可在 macOS、Linux 和 Windows作系统上运行。启动和运行 VS Code 既快速又简单。VS Code&#xff08;全称 Visual Studio Code&#xff09;是一款由Microsoft 推出的免费、开源、跨平台的代码编辑器&#xff0c;拥有强大的功能和灵活…...

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&#xff08;面向数据的技术堆栈&#xff09;是一套由 Unity 提供支持的技术&#xff0c;用于提供高性能游戏开发解决方案&#xff0c;特别适合需要处理大量数据的游戏&#xff0c;例如大型开放世…...

linux 软件安装(上)

一、基础环境准备 1.1、安装VM 1.2、在VM上导入linux iso镜像&#xff0c;装好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时的问题及权限处理方法

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

【江协科技STM32】ADC数模转换器-学习笔记

ADC简介 ADC&#xff08;Analog-Digital Converter&#xff09;模拟-数字转换器ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量&#xff0c;建立模拟电路到数字电路的桥梁&#xff0c;ADC是一种将连续的模拟信号转换为离散的数字信号的设备或模块12位逐次逼近型…...

QT系列教程(20) Qt 项目视图便捷类

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

git worktree的使用

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

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用户&#xff0c;以及查看是否开启binlog 三、canal 相关配置文件3.1 canal.properties 完整文…...

Java高频面试之集合-08

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本baby今天来报道了&#xff01;哈哈哈哈哈嗝&#x1f436; 面试官&#xff1a;详细说说CopyOnWriteArrayList CopyOnWriteArrayList 详解 CopyOnWriteArrayList 是 Java 并发包&#xff08;java.util…...

C#实现高性能异步文件下载器(支持进度显示/断点续传)

一、应用场景分析 异步文件下载器用处很大&#xff0c;当我们需要实现以下功能时可以用的上&#xff1a; 大文件下载&#xff08;如4K视频/安装包&#xff09; 避免UI线程阻塞&#xff0c;保证界面流畅响应多任务并行下载 支持同时下载多个文件&#xff0c;提升带宽利用率后台…...

【数据分析】转录组基因表达的KEGG通路富集分析教程

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

GitHub中文界面终极指南:5分钟让你的GitHub说中文

GitHub中文界面终极指南&#xff1a;5分钟让你的GitHub说中文 【免费下载链接】github-chinese GitHub 汉化插件&#xff0c;GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese 想象一下&#xff0c;你…...

PLC新手必看:三菱FX2N顺序功能图的5个常见错误及解决方法

三菱FX2N顺序功能图实战避坑指南&#xff1a;从原理到调试的完整解决方案 第一次接触三菱FX2N的顺序功能图编程时&#xff0c;那种既兴奋又忐忑的心情至今记忆犹新。看着逻辑清晰的流程图在仿真中运行失常&#xff0c;或是设备突然"抽风"时的茫然&#xff0c;是每个P…...

从CISC到RISC:指令寻址方式如何影响CPU设计?

从CISC到RISC&#xff1a;指令寻址方式如何重塑现代CPU设计&#xff1f; 在计算机体系结构的演进历程中&#xff0c;指令寻址方式始终是影响处理器性能的关键因素。当我们比较x86与ARM处理器的能效差异时&#xff0c;或是分析苹果M系列芯片为何能在低功耗下实现惊人性能时&…...

3MF格式与Blender从入门到精通:重塑3D打印工作流

3MF格式与Blender从入门到精通&#xff1a;重塑3D打印工作流 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 概念解析&#xff1a;为什么3MF正在取代STL成为行业新标准 …...

PostgreSQL 模式级权限迁移:一键批量修改所有表与对象的所有者

1. 为什么需要批量修改PostgreSQL对象所有者&#xff1f; 在实际的数据库运维工作中&#xff0c;经常会遇到需要批量修改数据库对象所有者的情况。我遇到过不少这样的场景&#xff1a;公司部门重组后&#xff0c;原先由开发团队A负责的项目转交给团队B维护&#xff1b;或者某个…...

注册表CLSID权限控制技术:通过权限管理实现IDM永久试用

注册表CLSID权限控制技术&#xff1a;通过权限管理实现IDM永久试用 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script 问题引入&#xff1a;IDM试用期管理的技术困境…...

绿色低碳+高效交付:中集模块化数据中心用实力印证中国方案全球竞争力

随着人工智能与绿色转型成为全球经济增长核心引擎&#xff0c;高算力需求正推动数据中心建设向预制化、高效能方向加速演进。中集集团&#xff08;000039.SZ/2039.HK&#xff09;凭借工业化制造与全球交付优势&#xff0c;2025年在模块化数据中心&#xff08;AIDC&#xff09;领…...

手把手教你windows下如何部署copaw

前言&#xff1a; 本文内容主要讲解通过手工部署python并使用pip安装部署copaw&#xff0c;在官网有一键部署脚本等等教程&#xff0c;都很方便&#xff0c;但为什么作者要通过手工部署python环境&#xff0c;原因很简单&#xff0c;解决环境冲突的问题&#xff0c;通过conda能…...

FLUX.1-dev LoRA微调指南:基于像素幻梦输出数据集训练专属风格

FLUX.1-dev LoRA微调指南&#xff1a;基于像素幻梦输出数据集训练专属风格 1. 前言&#xff1a;为什么需要LoRA微调 在像素艺术创作领域&#xff0c;每个艺术家都渴望拥有独特的视觉风格。FLUX.1-dev作为当前最先进的扩散模型&#xff0c;配合像素幻梦(Pixel Dream Workshop)…...

手把手教你用modf()和fmod()解决C语言浮点数计算中的常见坑

深入解析C语言浮点数计算&#xff1a;modf()与fmod()的实战应用 浮点数计算在C语言开发中无处不在&#xff0c;从游戏物理引擎到嵌入式传感器数据处理&#xff0c;精确的浮点运算直接关系到程序行为的正确性。然而&#xff0c;许多开发者第一次遭遇浮点数计算误差时&#xff0c…...