Debian Java持续集成与部署实践指南
在Debian系统上实现Java项目的持续集成(CI)与持续部署(CD),核心是通过自动化工具串联代码管理、编译、测试、打包及部署流程。其中,Jenkins作为开源CI/CD服务器,结合Debian的包管理特性,是主流解决方案。
在开始前,需确保Debian系统安装以下工具:
Java Development Kit (JDK):Java项目编译与运行的基础。推荐使用OpenJDK 11(LTS版本),通过以下命令安装:
sudo apt update && sudo apt install -y openjdk-11-jdk
安装完成后,通过java -version验证安装(需显示版本信息)。
Apache Maven:Java项目管理与构建工具(可选但常用)。通过以下命令安装:
sudo apt install -y maven
安装后,通过mvn -v验证(需显示Maven版本及Java版本)。
Jenkins:CI/CD服务器。通过Debian官方源安装:
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
echo "deb http://pkg.jenkins.io/debian-stable binary/" | sudo tee /etc/apt/sources.list.d/jenkins.list
sudo apt update && sudo apt install -y jenkins
启动Jenkins服务并设置开机自启:
sudo systemctl start jenkins && sudo systemctl enable jenkins
访问http://<服务器IP>:8080,通过/var/lib/jenkins/secrets/initialAdminPassword获取初始密码完成解锁,后续安装推荐插件(如Git、Maven Integration、Pipeline)。
安装必要插件:
进入Jenkins管理界面(Manage Jenkins → Manage Plugins),安装以下插件:
配置全局工具:
进入Manage Jenkins → Global Tool Configuration,设置JDK与Maven路径(若通过apt安装,Jenkins会自动检测;若手动安装,需指定路径,如/usr/lib/jvm/java-11-openjdk-amd64)。
配置SSH凭证(用于自动化部署):
进入Manage Jenkins → Manage Credentials,添加SSH私钥(格式为SSH Username with private key),用于连接目标部署服务器。
适用于传统Java项目(如Maven项目),步骤如下:
New Item,输入名称(如java-app-ci),选择Freestyle project,点击OK。Git,输入仓库URL(如https://github.com/your-repo/java-app.git),添加凭证(若仓库私有)。Poll SCM,设置定时任务(如H/5 * * * *表示每5分钟检查代码变更;或配置GitHub Webhook触发实时构建)。Invoke top-level Maven targets,输入Maven命令(如clean package,用于清理旧构建并打包项目)。Send build artifacts over SSH,选择目标服务器SSH配置,设置Source files(如target/*.jar,构建产物路径)与Remote directory(如/opt/java-app,目标服务器部署路径)。适用于需要灵活流程控制的项目(如多环境部署、并行测试),通过Jenkinsfile定义流程:
Jenkinsfile,内容如下(以Maven项目为例):pipeline {
agent any
tools {
jdk 'openjdk-11' // 关联Global Tool Configuration中的JDK配置
maven 'maven-3.8.6' // 关联Global Tool Configuration中的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') {
steps {
withCredentials([sshUserPrivateKey(credentialsId: 'ssh-key-id', keyFileVariable: 'SSH_KEY')]) { // 使用SSH凭证
sh 'scp -i $SSH_KEY target/*.jar user@your-server:/opt/java-app/app.jar' // 部署到目标服务器
sh 'ssh -i $SSH_KEY user@your-server "systemctl restart java-app.service"' // 重启服务(假设目标服务器有对应服务)
}
}
}
}
}
Pipeline类型Job,选择Pipeline script from SCM,指定Git仓库URL与Jenkinsfile路径(如Jenkinsfile),保存即可。自动化部署是CI/CD的核心目标,需结合目标服务器环境配置:
目标服务器准备:
systemd管理服务(如Spring Boot应用)。例如,创建/etc/systemd/system/java-app.service文件:[Unit]
Description=Java Application
After=syslog.target
[Service]
User=appuser
ExecStart=/usr/bin/java -jar /opt/java-app/app.jar
Restart=always
[Install]
WantedBy=multi-user.target
启动服务并设置开机自启:sudo systemctl daemon-reload
sudo systemctl start java-app
sudo systemctl enable java-app
部署流程整合:
在Jenkins Job的Deploy阶段,通过scp命令将构建产物(如app.jar)复制到目标服务器,再通过ssh命令重启服务(如上述Jenkinsfile中的Deploy阶段)。若需更复杂的部署(如蓝绿部署、滚动更新),可结合Docker与Kubernetes(如使用docker-compose或kubectl命令)。
Build History查看每次构建的结果(成功/失败),点击构建编号可查看详细日志(如编译错误、测试失败)。Jenkinsfile中添加mvn -Dmaven.repo.local=/var/lib/jenkins/maven-repo clean package;Jenkinsfile的Test阶段使用parallel指令(如sh 'mvn test -Dtest=*Test');Email Extension Plugin或Slack Notification Plugin,在构建失败时发送通知。通过以上步骤,可在Debian系统上搭建Java项目的持续集成与部署流程,实现代码变更自动触发构建、测试、部署的全链路自动化,提升开发效率与软件质量。