在开始搭建Jenkins流水线之前,我们需要先准备好基础运行环境。就像盖房子需要打地基一样,稳定的环境是自动化部署的前提条件。我遇到过不少开发者直接跳过环境配置,结果在后续步骤中频繁报错,最后不得不返工重来。
SpringBoot项目运行离不开Java环境,这里推荐使用JDK 8或11这两个长期支持版本。以JDK 8为例,具体安装步骤如下:
bash复制# 解压安装包
tar -zxvf jdk-8u231-linux-x64.tar.gz -C /usr/local/
# 配置环境变量
vim /etc/profile
在文件末尾添加以下内容(注意根据实际路径调整):
bash复制export JAVA_HOME=/usr/local/jdk1.8.0_231
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
保存后执行source /etc/profile使配置生效。验证安装是否成功:
bash复制java -version
如果看到类似"java version "1.8.0_231""的输出,说明安装正确。这里有个坑点要注意:有些Linux发行版自带了OpenJDK,可能会导致版本冲突,建议先用rpm -qa | grep java检查并移除冲突的JDK。
Maven是Java项目的构建利器,安装过程与JDK类似:
bash复制tar -zxvf apache-maven-3.8.5-bin.tar.gz -C /usr/local/
vim /etc/profile
添加Maven环境变量:
bash复制export MAVEN_HOME=/usr/local/apache-maven-3.8.5
export PATH=$PATH:$MAVEN_HOME/bin
同样需要执行source /etc/profile。验证安装:
bash复制mvn -v
为了提高依赖下载速度,强烈建议配置阿里云镜像。编辑conf/settings.xml文件:
xml复制<mirrors>
<mirror>
<id>aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Aliyun Maven</name>
<url>https://maven.aliyun.com/repository/central</url>
</mirror>
</mirrors>
Jenkins提供war包和系统包两种安装方式,各有优缺点:
| 方式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| war包 | 简单直接,无需root权限 | 需要手动管理进程 | 快速测试、临时环境 |
| 系统包(rpm) | 自动配置服务,开机启动 | 需要root权限 | 生产环境、长期使用 |
bash复制nohup java -jar jenkins.war --httpPort=8080 > jenkins.log 2>&1 &
这种方式启动后,Jenkins会运行在当前用户目录下的.jenkins文件夹中。首次访问时需要输入初始密码,位置在:
bash复制cat ~/.jenkins/secrets/initialAdminPassword
对于生产环境,推荐使用系统包方式:
bash复制sudo wget -O /etc/yum.repos.d/jenkins.repo \
https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
sudo yum install jenkins
安装后需要修改配置文件/etc/sysconfig/jenkins,确保JAVA_HOME指向正确的JDK路径。然后启动服务:
bash复制sudo systemctl start jenkins
sudo systemctl enable jenkins
首次登录后,Jenkins会提示安装推荐插件。这里经常会出现SSL证书问题导致安装失败,解决方法如下:
/var/lib/jenkins/hudson.model.UpdateCenter.xml:xml复制<url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
修改/var/lib/jenkins/updates/default.json文件,将所有http://updates.jenkins-ci.org/download替换为https://mirrors.tuna.tsinghua.edu.cn/jenkins
在Jenkins管理界面中,进入"Manage Jenkins" → "Manage Plugins" → "Advanced",将更新站点改为:
code复制https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
如果仍有插件安装失败,可以手动下载.hpi文件,然后在"Advanced"页面中上传安装。
在Jenkins首页点击"新建Item",选择"构建一个Maven项目"。这里有个关键点:如果你没看到这个选项,说明Maven插件没有安装成功,需要返回插件管理安装"Maven Integration"插件。
项目基本配置包括:
进入"Manage Jenkins" → "Global Tool Configuration",设置:
这是自动化部署的核心部分,通常需要编写shell脚本完成以下操作:
示例脚本:
bash复制#!/bin/bash
# 进入项目目录
cd /opt/apps
# 停止旧服务
APP_NAME=myapp.jar
PID=$(ps -ef | grep $APP_NAME | grep -v grep | awk '{print $2}')
if [ -n "$PID" ]; then
kill -9 $PID
fi
# 备份旧版本
if [ -f "$APP_NAME" ]; then
mv $APP_NAME $APP_NAME.$(date +%Y%m%d%H%M%S)
fi
# 部署新版本
cp $WORKSPACE/target/*.jar /opt/apps/$APP_NAME
# 启动新服务
nohup java -jar $APP_NAME > app.log 2>&1 &
为了实现真正的持续集成,我们需要配置代码提交时自动触发构建。在"构建触发器"部分勾选"Poll SCM",然后设置轮询间隔:
code复制H/5 * * * *
这个表达式表示每5分钟检查一次代码变更。如果想在代码推送时立即构建,可以结合GitHub/Gitee的Webhook功能。
当构建失败时,首先查看控制台输出。常见错误包括:
-DskipTests参数跳过测试MAVEN_OPTS=-Xmx1024m可能原因:
BUILD_ID=dontKillMe/etc/sysconfig/jenkins中的JENKINS_JAVA_OPTIONS对于复杂的部署流程,推荐使用Jenkinsfile定义流水线。下面是一个完整的SpringBoot部署示例:
groovy复制pipeline {
agent any
tools {
maven 'Maven-3.8.5'
jdk 'JDK-1.8'
}
stages {
stage('Checkout') {
steps {
git branch: 'main',
url: 'https://gitee.com/your-repo.git',
credentialsId: 'gitee-token'
}
}
stage('Build') {
steps {
sh 'mvn clean package -DskipTests'
}
}
stage('Deploy') {
steps {
sh '''
APP_HOME=/opt/apps
APP_NAME=myapp.jar
# 停止旧服务
pkill -f $APP_NAME || true
# 备份部署
cp target/*.jar $APP_HOME/$APP_NAME
# 启动服务
cd $APP_HOME
nohup java -jar $APP_NAME > app.log 2>&1 &
'''
}
}
}
post {
success {
emailext body: '构建成功!',
subject: 'Jenkins构建通知',
to: 'dev@example.com'
}
failure {
emailext body: '构建失败,请检查!',
subject: 'Jenkins构建通知',
to: 'dev@example.com'
}
}
}
这个脚本实现了从代码拉取到构建部署的全流程自动化,还添加了邮件通知功能。将Jenkinsfile存放在项目根目录,然后在Jenkins中创建Pipeline项目并选择"Pipeline script from SCM"即可。
在实际项目中,你可能还需要添加代码质量检查、Docker镜像构建等更多阶段。Jenkins Pipeline的强大之处在于可以灵活定义各种复杂的部署流程,同时保持代码化的可维护性。