jenkins--构建传输jar包后启动java服务

Posted hwjShl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jenkins--构建传输jar包后启动java服务相关的知识,希望对你有一定的参考价值。

jenkins--构建传输jar包后启动java服务

目标:针对单体java服务

前置条件:jdk1.8 日志切割cronolog

jdk1.8安装
cronolog安装

创建server.sh脚本文件

#! /bin/bash
JAR_PATH="/data/forwarder" # 文件目录
JAR_FILE="ruoyi-admin.jar" # 文件名
LOG_PATH="/data/forwarder/logs" #cronolog 日志切割路径
LOG_FILE="$LOG_PATH/console-%Y-%m-%d.out" #cronolog 日志切割生成文件
# 停止 Java 服务
echo "Stopping Java service..."
PID=$(ps -ef | grep $JAR_FILE | grep -v grep | awk \'print $2\')
if [ -n "$PID" ]; then
    kill $PID
fi
sleep 5
# 启动 Java 服务
echo "Starting Java service..."
source /etc/profile #jenkins默认是用非登录模式来执行shell命令,所有没有加载环境变量配置文件。
nohup java -jar $JAR_PATH/$JAR_FILE 2>&1 | cronolog $LOG_FILE >> /dev/null 2>&1 &
#/dev/null 中,这是一个特殊的文件,它会将所有数据直接丢弃。
停止java服务
输出 "Stopping Java service..." 字符串。
使用 ps -ef 命令列出当前系统上所有进程的详细信息。
使用 grep 命令过滤出包含 $JAR_FILE 字符串的进程。
使用 grep -v grep 命令将过滤出来的进程中排除包含 "grep" 字符串的进程(即过滤掉 grep $JAR_FILE 这条命令本身)。
使用 awk \'print $2\' 命令提取非grep进程的 PID。
如果 PID 存在,则使用 kill 命令杀死该进程。
为了确保进程已经停止,等待 5 秒钟。
2>&1、>>、最后一个& 的作用
2>&1 是将标准错误输出(stderr)重定向到标准输出(stdout),也就是说,它将标准错误输出的内容和标准输出合并为一个流,一起输出到管道中或者输出到文件。

>> 是将输出重定向到指定文件的末尾,并在不覆盖已有内容的情况下将输出内容追加到该文件中。

最后一个 & 表示将进程放到后台执行,在命令行中使用 & 可以让该命令在后台运行,控制台可以继续输入其他命令,而不必等待该命令执行完成。如果该命令是一个长时间运行的进程并且需要在后台持续运行,则需要使用 nohup 命令来使进程在退出 shell 后仍然运行。

jenkins调用脚本

文件全路径 sh /data/forwarder/ruoyi-admin.jar

cronolog 查看

进入日志目录/data/forwarder/logs

tail -f -n 500 console-2023-05-25.out #实时查看日志文件最近500条记录

命令行执行jenkins,构建job(可传递参数)

背景| 组内做UI测试,需要每天晚上执行一遍jenkins任务,jenkins任务本身是参数化构建的。但是因为jenkins本身的定时执行没有办法指定特殊的参数,所以考虑使用命令行方式启动jenkins
 

第一步:下载jenkins-cli.jar,查看帮助文档

不同版本的jenkins有自己对应命令行版本jar,所以最好从jenkins机上命令行说明页下载jar
 
访问jenkins的命令行说明页:http://192.168.111.111:8080/jenkins/cli
 
该页面可下载jenkins-cli.jar,并且介绍了一些命令
1.查看jenkins-cli.jar命令的帮助
java -jar jenkins-cli.jar -s http://192.168.111.111:8080/jenkins/ -help
 
如果想查看具体的某个jenkins-cli命令,可以在-help加上command
例如:查看build的具体使用方法
java -jar jenkins-cli.jar -s http://192.168.111.111:8080/jenkins/  help build
 
注意:最好用jenkins的ip加端口访问,我这里用域名访问会超时
 

第二步.使用build命令构建一个JOB

java -jar jenkins-cli.jar -s http://jenkinsurl  build JOBNAME -p tag=xxx --username xxx --password xxx
 
说明:
1.build后面直接跟JOB的名字
2.-p后面跟参数化构建的参数,使用key=value格式。如果有多个参数就写多个-p
3.—username和--password提供jenkins的账号密码
 
例如,执行jenkins的命令如下:
java -jar jenkins-cli.jar -s http://1192.168.111.111:8080/jenkins/  build UITest -p tag=20170922 -p ifRunUI=true -p  --username tester --password 123456
 
build的使用方法:
JOB : Name of the job to build
-c  : Check for SCM changes before starting the build, and if there‘s no
       change, exit without doing a build
-f  : Follow the build progress. Like -s only interrupts are not passed
       through to the build.
-p  : Specify the build parameters in the key=value format.
-s  : Wait until the completion/abortion of the command. Interrupts are passed
       through to the build.
-v  : Prints out the console output of the build. Use with -s
-w  : Wait until the start of the command
[root([email protected])@bjm6-193-96 script]# java -jar jenkins-cli.
 

其他:获得历史构建的参数

在命令行执行时,参数我们可能需要历史构建的参数
 
获取上次构建结果:
curl "http://192.168.111.111:8080/jenkins/view/app/job/JOBNAME/lastBuild/api/xml”
 
然后可以解析结果,可以通过expr在shell中解析,获得需要的参数,例如获得tag:
expr "$result" : ‘.*<name>tag</name><value>\([a-zA-Z0-9_-]*\)</value></parameter>‘
 
说明:$result为请求上次构建的结果,tag这里匹配的是字母数字和下划线中横线
 
 
更多获取构建结果的文章参考:http://blog.csdn.net/ljj_9/article/details/70270977

以上是关于jenkins--构建传输jar包后启动java服务的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins踩坑系列--你试过linux主机ssh登录windows,启动java进程吗,来试试吧

jenkins构建成功后,服务并没有在后台启动

命令行执行jenkins,构建job(可传递参数)

Jenkins迁移jobs后项目构建出现java.nio.file.DirectoryNotEmpt

jenkins丢弃旧的构建及常用操作

启动Jenkins