一.环境
系统Ubuntu Server 24.04 LTS 64bit
jdk11,
maven3.9.5,
mysql
nacos2.3.0
二.安装
1.安装jdk
更新包列表
sudo apt-get update
查看jdk列表
apt-cache search openjdk
下载jdk11
sudo apt-get install openjdk-11-jdk
中间会提示是否继续,输入y进行下一步:
输入java -version查看jdk是否正确安装,以下是成功安装示例:
2.安装maven
这里不指定特定的maven版本,如果需要指定特定版本,可以自行查询对应方法:
sudo apt-get install maven
同样中间输入y继续安装:
查看版本mvn -version,验证安装:
3.安装mysql
安装mysql
sudo apt install mysql-server
检查mysql状态
sudo systemctl status mysql
以root用户登录
sudo mysql -u root
设置密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
创建数据库
CREATE DATABASE database;
刷新权限
FLUSH PRIVILEGES;
退出mysql
EXIT;
使用密码登录(需要注意的是ubuntu系统下界面不会显示你输入的密码,看起来像是没有输入,但实际上有)
sudo mysql -u root -p
打开配置文件
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
修改配置 bind-address = 0.0.0.0
给指定远程IP配置权限
sudo mysql -u root -p
SELECT User, Host FROM mysql.user;(查看用户)
CREATE USER '用户名'@'允许访问的远程IP' IDENTIFIED BY '密码';
GRANT ALL PRIVILEGES ON *.* TO '用户名'@'允许访问的远程IP' WITH GRANT OPTION;
ALTER USER '用户名'@'允许访问的远程IP' IDENTIFIED WITH mysql_native_password BY '密码';(mysql8.0之后手动设置验证方式,避免报错Public Key Retrieval is not allowed)
刷新权限
FLUSH PRIVILEGES;
退出mysql
EXIT;
重启mysql
sudo systemctl restart mysql
修改SSH配置允许使用密码验证
sudo nano /etc/ssh/sshd_config
确保PasswordAuthentication yes
重启SSH
sudo systemctl restart ssh
测试远程连接(记得防火墙放开3306端口)
4.安装nacos
wget -c https://github.com/alibaba/nacos/releases/download/2.3.0/nacos-server-2.3.0.tar.gz(-c允许断点续传)
解压
tar -xzvf nacos-server-{version}.tar.gz
进入nacos目录,启动nacos
cd nacos/bin
./startup.sh -m standalone
防火墙放行nacos端口8848
登录查看并配置相关服务,可以查看到nacos页面即可
ip:8848/nacos
5.配置jenkins
(安装过程以及gitee配置同上篇文章)
服务器上创建部署的文件夹
sudo mkdir -p /NewFolder/subfolder1
Groovy脚本
pipeline {
agent any
stages {
stage('Checkout') {
steps {
// 检出源代码
git credentialsId: '凭证ID', url: 'git地址'
}
}
stage('Build') {
steps {
// 执行Maven构建
script {
sh 'mvn clean'
sh 'mvn package -DskipTests'
}
}
}
stage('Deploy') {
steps {
script {
// 定义部署目录和你的服务列表
def deployDir = '/部署文件的目录'
def services = ['service1','service2'] // 你的服务列表
// 确保部署目录存在
//sh "mkdir -p ${deployDir}"
// 遍历服务并部署
for (service in services) {
//jenkins打包的位置
def servicePath = "/var/lib/jenkins/workspace/${service}/target/${service}.jar"
def deployServiceDir = "${deployDir}"
def javaCmd = "java -jar ${deployServiceDir}/${service}.jar"
//检查服务并中止
def servicePid = sh(returnStdout: true, script: "jps -l | grep '${service}.jar' | awk '{print \$1}'").trim()
if (servicePid) {
sh "kill -TERM ${servicePid}"
sh "sleep 5" // 等待服务优雅关闭
if (sh(returnStdout: true, script: "jps -l | grep '${service}.jar'").trim()) {
echo "Service did not stop."
} else {
echo "Service stopped successfully."
}
} else {
echo "Service is not running."
}
// 复制构建产物到部署目录
//jar包是单文件,直接cp就可以
sh "cp ${servicePath} ${deployServiceDir}/"
// 检查文件是否存在并启动服务
if (fileExists("${deployServiceDir}/${service}.jar")) {
// 使用nohup在后台启动服务,并将输出重定向到日志文件
//设置环境变量,防止jenkins自动终止命令
withEnv(['JENKINS_NODE_COOKIE=dontKillMe']){
// 使用nohup在后台启动服务,并将输出重定向到日志文件
sh "BUILD_ID=DONTKILLME nohup ${javaCmd} > ${service}.log 2>&1 &"
//设置等待一段时间
sh "sleep 20"
}
echo "Service ${service} started."
} else {
echo "Deployment failed: JAR for ${service} not found."
}
}
}
}
}
}
post {
success {
echo 'Deployment successful!'
}
failure {
echo 'Deployment failed!'
}
}
}
需要注意打包文件类型,有jar和war两种,pom.xml里有产物名和文件类型
文件类型:
<packaging>jar</packaging>
文件名如下(spring-boot-maven-plugin是必需的,否则会报错no main manifest attribute):
<build> <finalName>文件名</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
*如果Jenkins在运行时报错找不到文件,可以查看jenkins的输出信息,查看jenkins打包之后产物在哪里
*如果jenkins报错权限不足,需要适当修改目标文件夹的所有者以及权限
*需要注意的是,这里nohup java -jar启动报错的话,并不一定会在jenkins显示,所有建议手动在服务器上启动一次看看是否正常
java -jar /project/yourProject.jar
如果可以正常启动,可以进一步尝试nohup java -jar /project/yourProject.jar > yourProject.log 2>&1 &
之后 查看端口情况sudo netstat -tulnp,确保jar包可以正常运行
接口测试
curl http://接口路径
三.结语
spring boot内嵌了tomcat,所以服务器可以省略安装tomcat以及相关的配置,所有环境都由spring boot本身集成