Jenkins流水线发布实战:React+SpringBoot全栈部署
📝 本文基于作者实际部署经验,已在生产环境成功搭建 Jenkins 流水线,实现 React+SpringBoot 项目自动化发布。
这次搭建的项目比较常规,前端是react写的,后端是springboot,并且由于是全栈开发,所以是在同一个项目中。接下来我演示下怎么用jenkins进行自动化发布。
1.jenkins必装插件
这里用到的是jenkinsFile主要是基于Groovy这个沙盒,有些前置插件。这里使用maven进行打包,所以需要Maven Integration plugin和Pipeline Maven Integration Plugin。Pip这个是由于后面的语法withMaven要用。 NodeJs打包前端要用到NodeJS Plugin和Pipeline: Nodes and Processes。 jenkins是部署在运维机,所以要对远端的服务器进行发布,要用到SSH Agent Plugin。
所以总共要用到这些插件:Maven Integration plugin、Pipeline Maven Integration Plugin、NodeJS Plugin、Pipeline: Nodes and Processes、SSH Agent Plugin。
2.配置工具
这里有两种方式,一种是自动安装,一种就是用你本地的配置,其实两种都没差。用本地的话,就是多配置一下目录。这里要注意的是,如果你是docker部署的jenkins并且需要给jenkins做读写权限,要给目录授权下,代码如下:
#jenkins默认就是1000:1000chown -R 1000:1000 /opt/apache-maven-3.6.3/其他的就简单截图。





3.配置令牌
你拉代码会涉及到git的账号密码,你发送远端服务器会涉及到服务器的密钥,这边点进去根据自己需要配置就好。


4.创建项目
创建很简单,主要就是看你jenkinsFile怎么写,我这里会提供简单参考。这里有个踩坑,EOF换行之后前面一定不能有空格。

//git仓库配置def coding = [:]coding.GIT_REPO_URL="xxx"coding.CREDENTIALS_ID="xxx"coding.GIT_BUILD_REF="xxx"
//远端服务器配置def serverConfig = [:]serverConfig.credentialsId="xxx"serverConfig.ip = "xx"serverConfig.username = "root"serverConfig.port = 22
//项目名称ADMIN_PROJECT_NAME="xxx-admin-server-0.0.1-SNAPSHOT"MOBILE_PROJECT_NAME="xxx-weixin-server-0.0.1-SNAPSHOT"
pipeline { agent any
tools { nodejs "NodeJS-20.15.0" maven "maven-3.6.3" }
stages { stage('测试打包工具') { steps { sh 'node -v' withMaven(maven: 'maven-3.6.3') { sh 'mvn -v' } } }
stage("检出") { steps { checkout([ $class: 'GitSCM', branches: [[name: coding.GIT_BUILD_REF]], userRemoteConfigs: [[url: coding.GIT_REPO_URL, credentialsId: coding.CREDENTIALS_ID]] ]) } }
stage('common打包') { steps { dir('xxx-common-module') { withMaven(maven: 'maven-3.6.3') { sh 'mvn clean install' } sh 'cp target/xxx-common-module-1.0.jar /opt/apache-maven-3.6.3/lib' } } }
stage('管理端打包') { steps { //编译前端 dir('xxx-admin-server/front') { sh 'npm install' sh 'npm run build' } //移动dist sh 'rm -rf xxx-admin-server/src/main/resources/static/assets' sh 'mv xxx-admin-server/front/dist/assets xxx-admin-server/src/main/resources/static/assets' sh 'rm xxx-admin-server/src/main/resources/static/index.html' sh 'mv xxx-admin-server/front/dist/index.html xxx-admin-server/src/main/resources/static/index.html' //打包管理端项目 dir('xxx-admin-server') { withMaven(maven: 'maven-3.6.3') { sh 'mvn clean package' } } } }
stage('手机端打包') { steps { //编译前端 dir('xxx-weixin-server/front') { sh 'npm install' sh 'npm run build' } //移动dist sh 'rm -rf xxx-weixin-server/src/main/resources/static/assets' sh 'mv xxx-weixin-server/front/dist/assets xxx-weixin-server/src/main/resources/static/assets' sh 'rm xxx-weixin-server/src/main/resources/static/index.html' sh 'mv xxx-weixin-server/front/dist/index.html xxx-weixin-server/src/main/resources/static/index.html' //打包手机端项目 dir('xxx-weixin-server') { withMaven(maven: 'maven-3.6.3') { sh 'mvn clean package' } } } }
stage('部署') { steps { echo '发布中...' sshagent([serverConfig.credentialsId]){ // 先使用scp命令将文件复制到远程服务器 sh """ scp -o StrictHostKeyChecking=no -P ${serverConfig.port} xxx-admin-server/target/${ADMIN_PROJECT_NAME}.jar ${serverConfig.username}@${serverConfig.ip}:/www/admin/ echo "管理端发送成功" """ // 然后使用ssh命令在远程服务器上执行脚本 sh """ ssh -o StrictHostKeyChecking=no ${serverConfig.username}@${serverConfig.ip} -p ${serverConfig.port} << 'EOF' echo "测试服务器连接成功" /www/restartAdminProject.sh echo "管理端移动完成"EOF """ } echo '发布完成.' } } }}#!/bin/bash
# Admin 项目名称和路径ADMIN_PROJECT_NAME="xxx-admin-server-0.0.1-SNAPSHOT"ADMIN_PROJECT_PATH="/www/admin"
# Java 环境路径和启动参数JAVA_HOME="/www/server/java/jdk1.8.0_371/bin/java"JAVA_OPTIONS="-Xmx1024M -Xms256M"JAVA_APP_OPTIONS="--server.port=9099 --spring.config.location=/www/admin/application-test.yml"
# 停止旧版本服务pkill -f ${ADMIN_PROJECT_NAME}.jar || true
#备份旧版本cp /www/admin/${ADMIN_PROJECT_NAME}.jar /www/admin/old-${ADMIN_PROJECT_NAME}.jar
# 移动 JAR 文件到 /www/SmartCommunity/admin,并替换旧版本mv /www/adminxxx/${ADMIN_PROJECT_NAME}.jar /www/admin/${ADMIN_PROJECT_NAME}.jar
# 启动新版本服务$JAVA_HOME $JAVA_OPTIONS -jar $ADMIN_PROJECT_PATH/${ADMIN_PROJECT_NAME}.jar $JAVA_APP_OPTIONS &相关推荐
- CentOS7安装Jenkins:从零开始搭建CI/CD环境 - Jenkins 基础安装配置
- RabbitMQ从入门到实战:消息队列核心用法详解 - CI/CD 中集成消息队列
- CentOS7 Docker安装使用指南:从零开始部署各种软件 - Docker 容器化部署
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!