在 Debian 上实现 Jenkins 自动化部署
一 环境准备与安装
sudo apt update && sudo apt install -y openjdk-11-jdkjava -versionwget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -echo "deb https://pkg.jenkins.io/debian-stable binary/" | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/nullsudo apt update && sudo apt install -y jenkins && sudo systemctl enable --now jenkinssudo cat /var/lib/jenkins/secrets/initialAdminPassword二 安全与网络配置
sudo ufw allow 8080/tcpsudo ufw reload三 创建流水线任务与触发方式
H/5 * * * *(每 5 分钟检查一次变更)http://<JENKINS_URL>/project/<JOB_NAME>),必要时配置 Secret Token 提高安全性。四 示例 Jenkinsfile 与部署方式
pipeline {
agent any
tools { maven 'Maven-3.8' } // 需在 Global Tool Configuration 中配置 Maven
stages {
stage('Checkout') { steps { checkout scm } }
stage('Build') { steps { sh 'mvn -B -DskipTests clean package' } }
stage('Deploy') {
steps {
sshPublisher(
publishers: [
sshPublisherDesc(
configName: 'prod-ssh',
transfers: [
sshTransfer(
sourceFiles: 'target/*.jar',
removePrefix: 'target',
remoteDirectory: '/opt/apps/myapp'
)
]
)
]
)
}
}
}
}
#!/usr/bin/env bash
set -e
APP_DIR=/opt/apps/myapp
JAR_NAME=myapp.jar
BACKUP_DIR=/opt/backups
TIMESTAMP=$(date +%F-%H%M%S)
mkdir -p "$BACKUP_DIR"
cd "$APP_DIR"
# 备份
if [ -f "$JAR_NAME" ]; then
cp "$JAR_NAME" "$BACKUP_DIR/${JAR_NAME%.jar}-$TIMESTAMP.jar"
fi
# 停止旧进程
PID=$(ps -ef | grep "$JAR_NAME" | grep -v grep | awk '{print $2}')
if [ -n "$PID" ]; then
kill "$PID" || true
sleep 5
fi
# 部署并启动
cp target/"$JAR_NAME" .
nohup java -Xms512m -Xmx512m -jar "$JAR_NAME" > app.log 2>&1 &
stage('Deploy via SSH') {
steps {
sh '''
ssh user@prod-server 'bash /opt/scripts/deploy.sh'
'''
}
}
stage('Deploy with Docker') {
steps {
sh '''
ssh user@prod-server '''
cd /opt/apps/myapp
docker stop myapp || true
docker rm myapp || true
docker build -t myapp:${BUILD_NUMBER} .
docker run -d --name myapp -p 8081:8080 myapp:${BUILD_NUMBER}
'''
'''
}
}
latest、v<版本>)实现快速回滚。五 常见问题与优化建议