欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > jenkins pipeline 发布 jar并运行

jenkins pipeline 发布 jar并运行

2024/10/24 9:29:40 来源:https://blog.csdn.net/hanjun0612/article/details/140833704  浏览:    关键词:jenkins pipeline 发布 jar并运行

废话不多说,上教程

一,配置publish ssh

二,配置 ssh server

记住Name

三 设置发布选项

1 设置模块多选(请安装多选插件:Active Choices Plug-in)

​ 

四 编写pipeline

说明:

1 modules.split(',')中的modules就是上面多选框的Name

2 详细解说:

execCommand: 'cd /java ; ps -ef | grep '+module_list[i].trim()+' | grep -v grep | awk \'{print $2}\' | xargs --no-run-if-empty kill -9 ; source /etc/profile ; nohup java -jar '+module_list[i].trim()+'.jar > '+module_list[i].trim()+'.log 2>&1 & '

// 转到目录

cd /java

//通过进程名查找PID

ps -ef | grep '+module_list[i].trim()+' | grep -v grep | awk \'{print $2}\' 

//删除此进程(如果为空则不运行kill) 

xargs --no-run-if-empty kill -9 

//此命令配合nohup,不然Jenkins中无法通过nohup运行Jar

source /etc/profile ;

//后台运行nohup

nohup java -jar '+module_list[i].trim()+'.jar > '+module_list[i].trim()+'.log 2>&1 &

完整代码:

pipeline {agent any// 设置工具tools {maven "Maven3"jdk "JDK17"}//动态参数environment{source_dir="${WORKSPACE}"}options {timestamps() // 设置在项目打印日志时带上时间戳disableConcurrentBuilds() // 不允许同时执行流水线,被用来防止同时访问公共资源等timeout(time: 40, unit: 'MINUTES') // 设置流水线运行超时时间,Jenkins自动终止流水线buildDiscarder(logRotator(numToKeepStr: '10')) // 保留n次构建历史}// 存放所有任务的合集stages {stage('clone') {steps {// 拉取代码git credentialsId: 'xxxx-xxxx-xxxx-xxx-xxxxxxxx', url: 'http://localhost:xxxx/xxxxx/kintech-cloud',branch: 'dev'}}// 打包stage('install') {steps {script {//服务名称数组module_list = modules.split(',')for (int i = 0; i < module_list.size(); i++) {echo "=================package ${module_list[i]} "// 打对应的项目以及依赖包bat 'mvn -Dmaven.test.failure.ignore=true -pl kintech-modules/' + module_list[i].trim() + ' -am clean package '}echo 'Install success'}}}// 部署stage('deploy') {steps {script {for (int i = 0; i < module_list.size(); i++) {echo "=================sshPublisher ${module_list[i]} "// scp 免密传输sshPublisher(publishers: [sshPublisherDesc(configName: 'kintech-cloud测试服务', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'ls', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: 'kintech-modules/'+module_list[i].trim()+'/target/', sourceFiles:  'kintech-modules/'+module_list[i].trim()+ '/target/' +module_list[i].trim()+'.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: true)])    }echo 'Deploy success'}}}// 启动stage('start') {steps {script {for (int i = 0; i < module_list.size(); i++) {//启动 (cd到java目录,杀掉进程,启动jar)sshPublisher(publishers: [sshPublisherDesc(configName: 'kintech-cloud测试服务', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'cd /java ; ps -ef | grep '+module_list[i].trim()+' | grep -v grep | awk \'{print $2}\' | xargs --no-run-if-empty kill -9 ; source /etc/profile ; nohup java -jar '+module_list[i].trim()+'.jar > '+module_list[i].trim()+'.log 2>&1 & ', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '/java', sourceFiles: '/java')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: true)])}echo 'Start success'}}}}
}

五 效果

六 题外话

我的模块层级,略有不同,所以打包路径也不一样。

如下图:

gateway就是一个模块,而kintech-bo模块在总的kintech-modules模块下。

所以发布jar时,打包路径会有所不同。

而我的解决方案是,增加一个选项框,用Referenced parameters 来记录。

最后在pipeline中拼接:modulesPath.trim()+module_list[i]

 我的选项

注意,modulesPath带上/

kintech-modules:

 kintech-gateway:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com