1. 前提准备:安装必要工具 在Debian系统上实现Java项目的持续集成/持续部署(CI/CD),需先安装以下核心工具:
sudo apt update && sudo apt install -y openjdk-11-jdk,安装完成后通过java -version验证是否成功。sudo apt install -y maven,安装后通过mvn -v验证。wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -,然后创建源文件sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list',更新包索引并安装:sudo apt update && sudo apt install -y jenkins。启动服务并设置开机自启:sudo systemctl enable --now jenkins,默认端口为8080。2. 配置Jenkins基础环境
http://<服务器IP>:8080,需输入初始管理员密码(路径:/var/lib/jenkins/secrets/initialAdminPassword),复制粘贴即可解锁。/usr/lib/jvm/java-11-openjdk-amd64)。3. 创建Jenkins Job(Freestyle Project示例)
java-app-ci),选择“Freestyle project”,点击“OK”。https://github.com/your-repo/java-app.git),并添加凭证(SSH或用户名/密码,取决于仓库类型)。H/5 * * * *表示每5分钟检查一次)或“GitHub hook trigger for GITScm polling”(代码推送时自动触发,需配合GitHub Webhook使用)。clean package,用于清理旧构建并生成新jar包)。target/*.jar)或“Publish JUnit test result report”(发布测试报告,需项目生成junit.xml文件)。4. 升级为Pipeline(推荐:更灵活的流程管理)
Jenkinsfile(使用声明式语法),定义CI/CD流程。示例如下:pipeline {
agent any
tools {
jdk 'openjdk-11' // 关联全局工具配置中的JDK
maven 'maven-3.8.6' // 关联全局工具配置中的Maven
}
stages {
stage('Checkout') {
steps {
git branch: 'main', url: 'https://github.com/your-repo/java-app.git' // 拉取代码
}
}
stage('Build') {
steps {
sh 'mvn clean package' // 编译打包
}
}
stage('Test') {
steps {
sh 'mvn test' // 执行单元测试
}
post {
always {
junit '**/target/surefire-reports/*.xml' // 发布测试报告
}
}
}
stage('Deploy-Staging') {
when {
branch 'main' // 仅main分支触发 staging 部署
}
steps {
sshPublisher(
publishers: [
sshPublisherDesc(
configName: 'staging-server', // SSH服务器配置名称(需提前在Jenkins中添加)
transfers: [
sshTransfer(
sourceFiles: 'target/*.jar',
removePrefix: 'target',
remoteDirectory: '/opt/java-app/staging' // 部署到目标服务器路径
)
],
usePromotionTimestamp: false
)
]
)
}
}
stage('Deploy-Production') {
when {
branch 'main'
input message: 'Deploy to production?', ok: 'Deploy' // 手动确认生产部署
}
steps {
sshPublisher(
publishers: [
sshPublisherDesc(
configName: 'production-server', // 生产环境SSH配置
transfers: [
sshTransfer(
sourceFiles: 'target/*.jar',
removePrefix: 'target',
remoteDirectory: '/opt/java-app/production'
)
]
)
]
)
}
}
}
}
SSH Username with private key),用于Jenkins连接目标服务器(目标服务器需开启SSH服务,且Jenkins服务器有部署权限)。Jenkinsfile路径(如Jenkinsfile),保存即可。5. 实现自动化部署
ssh-keygen -t rsa),将公钥(~/.ssh/id_rsa.pub)添加到目标服务器的~/.ssh/authorized_keys文件中。在Jenkins中添加SSH私钥凭证(参考步骤4)。Jenkinsfile的部署阶段添加SSH命令:sshPublisher(
publishers: [
sshPublisherDesc(
configName: 'staging-server',
transfers: [...],
execCommand: 'systemctl restart java-app.service' // 重启服务(需提前配置好服务)
)
]
)
Settings→Webhooks→Add webhook,填写Jenkins URL如http://<服务器IP>:8080/github-webhook/)实现代码推送自动触发构建,或通过Jenkins的“Build Now”手动触发。6. 监控与优化
Jenkinsfile中添加mavenLocalRepo参数,指向共享目录);