当前位置: 首页 > 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富集分析,可…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

DAY 26 函数专题1

函数定义与参数知识点回顾&#xff1a;1. 函数的定义2. 变量作用域&#xff1a;局部变量和全局变量3. 函数的参数类型&#xff1a;位置参数、默认参数、不定参数4. 传递参数的手段&#xff1a;关键词参数5 题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一…...