jm
jm(Java Manager)是使用go语言实现的一个自动化构建工具,支持对java平台的编译、构建、打包、发布等操作,通过yaml配置,支持maven多模块的构建和依赖关联打包。
使用
下载安装
工具下载页面: Java Manager
执行:
mv jm /usr/local/bin
chmod +x /usr/local/bin/jm
使用方法
在任意目录执行jm,会提示使用方法,如下:
用法
jm [exec]
提示
exec build
示例
jm build 构建
jm 帮助
jm help 帮助
jm -h 帮助
jm ? 帮助
jm version 版本
jm -v 版本
jm --v 版本
作者
zouliming@netwisd.com
gitlab-ci.yml示例:
stages:
- pull
- build
pull:
only:
- master
stage: pull
before_script:
- cd $CI_PROJECT_DIR
script:
- git pull origin master
build-deploy:
only:
- master
stage: build
script:
- jm build
default:
before_script:
- . /etc/profile
- . ~/.bashrc
- cd $CI_PROJECT_DIR
- chmod +x ./* -R
完整配置
jm的配置文件名称为cicd.yaml,此名称为固定名称,不可修改,配置文件的内容如下:
# *********************
# 构建服务的配置,此配置用于配置所有构建服务配置
# zouliming@netwisd.com
# 2023.4.21
# *********************
logger:
path: "/root/jm/incloud5/log" # 日志文件路径。默认为空,表示关闭,仅输出到终端
file: "{Y-m-d}.log" # 日志文件格式。默认为"{Y-m-d}.log"
prefix: "" # 日志内容输出前缀。默认为空
level: "info" # 日志输出级别
ctxKeys: [ ] # 自定义Context上下文变量名称,自动打印Context的变量到日志中。默认为空
header: true # 是否打印日志的头信息。默认true
stdout: true # 日志是否同时输出到终端。默认true
rotateSize: 0 # 按照日志文件大小对文件进行滚动切分。默认为0,表示关闭滚动切分特性
rotateExpire: 0 # 按照日志文件时间间隔对文件滚动切分。默认为0,表示关闭滚动切分特性
rotateBackupLimit: 0 # 按照切分的文件数量清理切分文件,当滚动切分特性开启时有效。默认为0,表示不备份,切分则删除
rotateBackupExpire: 0 # 按照切分的文件有效期清理切分文件,当滚动切分特性开启时有效。默认为0,表示不备份,切分则删除
rotateBackupCompress: 0 # 滚动切分文件的压缩比(0-9)。默认为0,表示不压缩
rotateCheckInterval: "1h" # 滚动切分的时间检测间隔,一般不需要设置。默认为1小时
stdoutColorDisabled: false # 关闭终端的颜色打印。默认开启
writerColorEnable: false # 日志文件是否带上颜色。默认false,表示不带颜色
# 构建服务的配置
service:
version: "5.1.0-SNAPSHOT"
#single为单模块模式,multi为多模块多目录模式,multi分两种:multi-standard、multi-customized
#multi-standard多模块会按项目名称以“-”连接符递归做目录构建
#如:incloud-biz-demo-test,那么你的项目目录结构为:/incloud/incloud-biz/incloud-biz-demo/incloud-biz-demo-test这种结构
#multi-customized为自定义多目录结构,实现原理是根据相应的服务名遍历磁盘的目录,如果目录结构多,会有性能问题,请使用multi-standard模式;
#multi-customized需要保证填写的服务名跟实际项目的目录名一致,如incloud-product-test,对应这个模块目录也为如incloud-product-test,多目录层级不用写,会自动查询遍历
use: multi-standard
single: # 当为multi时,此处为空或不要此标签,当为single时,此处为当前单服务的服务名(即:POM中定义的服务名)
multi:
default:
incloud-base-main: # 构建主服务的前提条件如下:
- incloud-base-dependency-app
- incloud-base-dependency-dict
- incloud-base-dependency-dynamic
- incloud-base-dependency-file
- incloud-base-dependency-fine
- incloud-base-dependency-mdm
- incloud-base-dependency-model
- incloud-base-dependency-msg
- incloud-base-dependency-openapi
- incloud-base-dependency-permission
- incloud-base-dependency-security
- incloud-base-dependency-task
- incloud-base-dependency-help
- incloud-go-starter
incloud-base-gateway: # 构建网关服务的前提条件如下:
- incloud-base-dependency-gateway
incloud-base-wf: # 构建工作流服务的前提条件如下:
- incloud-base-dependency-wf
incloud-base-log: # 构建日志服务的前提条件如下:
- incloud-base-dependency-log
incloud-base-demo:
incloud-base-admin:
all: # 构建所有服务的前提条件如下:
- incloud-pojo
- incloud-starter-base-center
- incloud-starter-base-oauth
- incloud-starter-base-openapi
- incloud-starter-base-permission
- incloud-starter-base-security
- incloud-starter-base-wf
- incloud-starter-common-core
- incloud-starter-common-db
- incloud-starter-common-es
- incloud-starter-common-log
- incloud-starter-common-mq-rabbit
- incloud-starter-common-mq-rocket
- incloud-starter-common-task
push:
nexus:
# 发布前是否先清除之前的,清除之前指的是相应模块的之前对应版本的SNAPSHOT版本,不是所有模块的所有版本
cleanPrevious: true
#依赖包配置,这些配置列表如果发生提交后,会构建到nexus仓库中
dependency:
- ${service.multi.default.incloud-base-main}
- ${service.multi.default.incloud-base-gateway}
- ${service.multi.default.incloud-base-wf}
- ${service.multi.default.incloud-base-log}
- ${service.multi.all}
- incloud-go-starter
#源码配置,这些配置列表如果发生提交后,会构建到nexus仓库中
sources:
- incloud-pojo
- incloud-base-dependency-mdm
# 仓库信息
repository:
#Nexus配置
nexus:
repo: maven-netwisd-snapshot
host: http://192.168.0.110:8081
username: admin
password: Netwisd*8
# 镜像仓库
image:
use: harbor
harbor:
repo: incloud5
host: https://dockerhub.kubekey.local
username: admin
password: Harbor12345
swr:
repo: tongxun
host: swr.heb-hbyt-1.global.hbyt.petrochina.com
# K8S的配置
kubernetes:
# 支持部署多命名空间
namespaces:
- incloud5
configmap: incloud-config
deploy:
fileName: deployment.yaml
# 快速构建开关,如果all为true,其他都不起作用了,其他都是单独控制
fastBuild:
service: false
dependency: false
source: false
all: false #如果all为true,其他都不起作用了
参数说明
service.use
single、multi-standard、multi-customized,支持这三种值,single为单模块模式,multi为多模块多目录模式,multi分两种:multi-standard、multi-customized
multi-standard多模块会按项目名称以“-”连接符递归做目录构建,如:incloud-biz-demo-test,那么你的项目目录结构为:/incloud/incloud-biz/incloud-biz-demo/incloud-biz-demo-test这种结构
multi-customized为自定义多目录结构,实现原理是根据相应的服务名遍历磁盘的目录,如果目录结构多,会有性能问题,请使用multi-standard模式; multi-customized需要保证填写的服务名跟实际项目的目录名一致,如incloud-product-test,对应这个模块目录也为如incloud-product-test,多目录层级不用写,会自动查询遍历
single模式一般情况下是指单模块时使用,一般使用微服务开发多模块业务系统时,不推荐使用这种方式,复用性太差;
service.multi.default.name
multi.default.xxx,xxx为服务名,服务名尽量与目录名保持一致,以免产生不必要的错误。
service.multi.default.name.dependency
multi.default.incloud-base-main.incloud-base-dependency-app,incloud-base-dependency-app为依赖的服务名, > **这里的依赖不是指java中的maven层面的依赖,是指构建层面的依赖,当前示例中指的是:incloud-base-main依赖于incloud-base-dependency-app服务的构建**, > 也就是说当incloud-base-dependency-app被构建时,incloud-base-main也会被构建
service.multi.default.all
指的是当这个配置下面的任意一个服务发生构建时,就会构建所有service.multi.default.name下面的服务。
kubernetes.deploy.fileName
指的是k8s的部署文件名称,一般为deployment.yaml,如果不是,需要修改此配置,这个配置的作用是指:如果需要特殊配置k8s部署的yaml文件的时,并且需要自己命名成自定义文件时,配置这个。
fastBuild
这个配置的主要作用是, 一般用于新项目初始化时,不想一个个模块构建,想快速构建所有时 ,就使用这个配置开关。
service:代表构建所有service,即:service.multi.default.name所有的服务。
dependency:代表构建所有dependency 即:service.multi.default.name.dependency所有依赖包。
source:代表构建所有source,即:push.nexus.sources下的所有源码包。
all:代表构建上面所有,all开启后,上面的开关都失效了,别外注意: 记得构建完成后再修改回来
项目上简化配置
因为在项目上使用时,没有像源码推送到nexus或那么多依赖构建需求,所以一般配置相对简单,示例如下:
# *********************
# 构建服务的配置,此配置用于配置所有构建服务配置
# zouliming@netwisd.com
# 2023.4.21
# *********************
logger:
path: "/root/jm/incloud5-pm/log" # 日志文件路径。默认为空,表示关闭,仅输出到终端
file: "{Y-m-d}.log" # 日志文件格式。默认为"{Y-m-d}.log"
prefix: "" # 日志内容输出前缀。默认为空
level: "info" # 日志输出级别
ctxKeys: [] # 自定义Context上下文变量名称,自动打印Context的变量到日志中。默认为空
header: true # 是否打印日志的头信息。默认true
stdout: true # 日志是否同时输出到终端。默认true
rotateSize: 0 # 按照日志文件大小对文件进行滚动切分。默认为0,表示关闭滚动切分特性
rotateExpire: 0 # 按照日志文件时间间隔对文件滚动切分。默认为0,表示关闭滚动切分特性
rotateBackupLimit: 0 # 按照切分的文件数量清理切分文件,当滚动切分特性开启时有效。默认为0,表示不备份,切分则删除
rotateBackupExpire: 0 # 按照切分的文件有效期清理切分文件,当滚动切分特性开启时有效。默认为0,表示不备份,切分则删除
rotateBackupCompress: 0 # 滚动切分文件的压缩比(0-9)。默认为0,表示不压缩
rotateCheckInterval: "1h" # 滚动切分的时间检测间隔,一般不需要设置。默认为1小时
stdoutColorDisabled: false # 关闭终端的颜色打印。默认开启
writerColorEnable: false # 日志文件是否带上颜色。默认false,表示不带颜色
# 构建服务的配置
service:
version: "5.0.0-SNAPSHOT"
#singLe为单模块模式,muti为多模块多目录模式,multi分两种: multi-standard、multi-customized
#muLti-standard多模块会按项目名称以连接符递归做目构建结构
#如: incLoud-biz-demo-test,那么你的项目目录结构为:incloud/incloud-biz/ingloud-biz-demo/incloud-biz-demo-test这种
#multi-customized为自定义多目录结构,实现原理是根据相应的服务名遍历磁盘的目录,如果目录结构多,会有性能问题,请使用multi-standard模式;
#multi-customized需要保证填写的服务名跟实际项目的目录名一致,如incLoud-product-test,对应这个模块目录也为如incloud-product-test,多目录层级不用写,会自动查询遍历
use: multi-standard
single: # 当为multi时,此处为空或不要此标签,当为single时,此处为当前单服务的服务名(即:POM中定义的服务名)
multi:
default:
- incloud-base-gateway
- incloud-base-main
- incloud-biz-pm
- incloud-biz-cs
# 仓库信息
repository:
# 镜像仓库
image:
use: harbor
harbor:
repo: incloud5
host: https://dockerhub.kubekey.local
username: admin
password: Harbor12345
swr:
repo: tongxun
host: swr.heb-hbyt-1.global.hbyt.petrochina.com
# K8S的配置
kubernetes:
# 支持部署多命名空间
namespaces:
- incloud5-pm
configmap: incloud-config
deploy:
fileName: deployment.yaml
Last modified: 20 一月 2025