前言
随着Docker、K8S、服务网格(ServiceMesh)等新型部署管理方式的兴起,Jenkins等工具已逐渐是CI/CD的较为过时的管理方式,但是对于中小型开发团队且系统部署规模及硬件资源都相对较小的情况下,为了减轻开发运维过程中频繁的版本迭代及多模块多服务器部署带来的负担,提高生产运维效率,减少因人为过失导致的线上生产事故,选择Jenkins来搭配代码管理工具GitLab及项目管理工具禅道、Jira等作为自动化构建部署管理方式,也不失为一个过渡性又相对合理的折中选择。
基于以上的想法和前提,针对于正在开发阶段的项目以及当下需求,我选择了搭建Jenkins作为暂时的构建部署工具,在搭建配置过程中遇到了一些坑,花了一些时间得以排查解决,现将详细的构建配置记录下来。
一、Jenkins安装及所需插件安装
安装过程略。
我这用到工具包括JDK、Git、Maven、NodeJS:可以选择自行在服务器安装,也可以通过Jenkins自动安装,位置在系统管理 》全局工具配置

安装的插件包括 NodeJS Plugin、Publish Over SSH:通过 系统管理 》插件管理 在线搜索安装,无需重启。

二、微服务后端模块配置
1、新建任务
填入任务名称,选择构建一个maven项目,如果没有该选项可能是插件没有安装导致,也可以选择构建一个自由 风格得软件项目

2、构建打包




clean package -pl carbon-modules/carbon-file -am -Dmaven.test.skip=true

3、远程部署
部署方式可以根据实际情况灵活调整:如果Jenkins和系统部署为一台服务器,则无需远程传输,将打包好的文件移动或复制到指定的目录运行即可;
如果不是同一台服务器,则一般需要将打包好的资源文件传输到目标服务器并通过命令启动运行。
下面截图展示远程部署的方式,基本适用于大多数场景。
配置SSH服务器:系统管理 》系统配置




source /etc/profile BUILD_ID=DONTKILLME cd /opt/carbon/backend/command sh carbon-modules-file.sh restart 9302
carbon-modules-file.sh
#!/bin/bash #配置jar名称 APP_NAME=carbon-modules-file SPACE=xxxxx PORT="$2" #使用说明,用来提示输入参数 usage() { echo "Usage: sh 脚本名.sh [start|stop|restart|status]" exit 1 } #检查程序是否在运行 is_exist(){ pid=`ps -ef|grep $APP_NAME.jar|grep -v 'grep'|awk '{print $2}' ` #如果不存在返回1,存在返回0 if [ -z "${pid}" ]; then return 1 else return 0 fi } #启动方法 start(){ is_exist if [ $? -eq "0" ]; then echo "${APP_NAME} is already running, pid=${pid} ." elif [ ${PORT} ]; then echo "port is ${PORT}" nohup java -Dserver.port=${PORT} -Xms512m -Xmx512m -jar ../${APP_NAME}.jar --spring.profiles.active=prod --spring.cloud.nacos.discovery.namespace=${SPACE} --spring.cloud.nacos.config.namespace=${SPACE} > ../logs/${APP_NAME}.log & echo "${APP_NAME} start success" else nohup java -Xms512m -Xmx512m -jar ../${APP_NAME}.jar --spring.profiles.active=prod --spring.cloud.nacos.discovery.namespace=${SPACE} --spring.cloud.nacos.config.namespace=${SPACE} > ../logs/${APP_NAME}.log & echo "${APP_NAME} start success" fi } #停止方法 stop(){ is_exist if [ $? -eq "0" ]; then kill -9 $pid else echo "${APP_NAME} is not running" fi } #输出运行状态 status(){ is_exist if [ $? -eq "0" ]; then echo "${APP_NAME} is running, Pid is ${pid}" else echo "${APP_NAME} is NOT running." fi } #重启 restart(){ stop start } #根据输入参数,选择执行对应方法,不输入则执行使用说明 case "$1" in "start") start ;; "stop") stop ;; "status") status ;; "restart") restart ;; *) usage ;; esac
注:由于使用了nacos作为了注册配置中心,命令中增加了相关设定,可自行根据项目情况修改;
命令文件中换行符一定确定是Unix(LF)格式;
将sh文件上传到服务器目录后,增加可执行权限(chmod u+x *.sh)。


4、复制构建

三、系统前端(Vue)配置
源码管理等略,参考后端配置。




cd /data/iot/tomcat_jenkins/data/workspace/carbon-ui/carbon-ui node -v npm -v npm install npm run build:prod cd dist rm -rf carbon-ui.tar.gz tar -zcvf carbon-ui.tar.gz *


cd /data/carbon/front/ tar -xzvf carbon-ui.tar.gz -C /data/carbon/front/ find /data/carbon/front/ -name "*.tar.gz" -exec rm -rf {} ; echo '发布成功!'
构建完成后查看日志,输出以下内容即为成功
