在Ubuntu上实现Jenkins自动化部署前,需完成以下基础配置:
sudo apt update && sudo apt install -y openjdk-11-jdk
java -version # 验证安装(需显示Java版本信息)
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo tee /usr/share/keyrings/jenkins-keyring.asc > /dev/null
echo "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] https://pkg.jenkins.io/debian-stable binary/" | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null
sudo apt update && sudo apt install -y jenkins
sudo systemctl start jenkins && sudo systemctl enable jenkins # 开机自启
http://<服务器IP>:8080),输入初始密码(位于/var/lib/jenkins/secrets/initialAdminPassword)完成解锁,安装推荐插件(如Pipeline、Git)。/usr/lib/jvm/java-11-openjdk-amd64);/usr/bin/git);/usr/share/maven)。ssh-keygen -t rsa -b 4096 -C "jenkins@example.com"
~/.ssh/id_rsa.pub)添加到目标服务器的~/.ssh/authorized_keys文件中;ubuntu-app-deploy),选择“Pipeline”,点击“OK”。Git,输入代码仓库URL(如https://github.com/your-repo/your-project.git)和分支(如main);Jenkinsfile,需与代码仓库中的文件路径一致)。pipeline {
agent any
environment {
// 环境变量配置
PROJECT_NAME = "ubuntu-app"
JAR_NAME = "${PROJECT_NAME}-${env.BUILD_ID}.jar"
DEPLOY_DIR = "/opt/ubuntu-app" // 远程服务器部署目录
SSH_USER = "ubuntu" // 远程服务器用户名
SSH_HOST = "192.168.1.100" // 远程服务器IP
}
stages {
stage('Checkout') {
steps {
// 从Git拉取代码
git branch: 'main', url: 'https://github.com/your-repo/your-project.git'
}
}
stage('Build') {
steps {
// 使用Maven构建项目(跳过测试)
sh 'mvn -U -Dmaven.test.skip=true clean package'
}
}
stage('Test') {
steps {
// 执行单元测试(可选)
sh 'mvn test'
}
}
stage('Deploy') {
steps {
script {
// 停止远程服务器上的旧进程(避免端口冲突)
sh "ssh ${SSH_USER}@${SSH_HOST} 'pkill -f ${JAR_NAME} || true'"
// 删除旧JAR包
sh "ssh ${SSH_USER}@${SSH_HOST} 'rm -f ${DEPLOY_DIR}/${JAR_NAME}'"
// 复制新JAR包到远程服务器
sh "scp target/${JAR_NAME} ${SSH_USER}@${SSH_HOST}:${DEPLOY_DIR}/"
// 启动应用(后台运行,输出日志到文件)
sh "ssh ${SSH_USER}@${SSH_HOST} 'nohup java -jar ${DEPLOY_DIR}/${JAR_NAME} --server.port=8080 > ${DEPLOY_DIR}/${PROJECT_NAME}.log 2>&1 &'"
}
}
}
}
post {
success {
// 构建成功通知(如邮件、Slack)
echo "Deployment successful for build #${env.BUILD_NUMBER}"
}
failure {
// 构建失败通知
echo "Deployment failed for build #${env.BUILD_NUMBER}"
}
}
}
注:可根据项目需求调整阶段(如添加Docker构建、推送镜像等)。http://<Jenkins服务器IP>:8080/github-webhook/),实现代码推送后自动触发构建。H/5 * * * *表示每5分钟检查一次代码变更,若有变更则触发构建)。git push origin main);ps -ef | grep java查看进程,tail -f /opt/ubuntu-app/ubuntu-app.log查看日志)。docker或ssh命令,需将Jenkins用户加入对应组:sudo usermod -aG docker jenkins # 允许Jenkins使用Docker
sudo usermod -aG ssh jenkins # 允许Jenkins使用SSH
sudo systemctl restart jenkins # 重启Jenkins服务
ssh ${SSH_USER}@${SSH_HOST} 'pkill -f ${JAR_NAME}')。-U参数,强制更新依赖(如mvn -U clean package)。