Debian上Jenkins自动化部署常用脚本与示例
脚本类型与适用场景
Bash 一键安装脚本
#!/usr/bin/env bash
set -e
sudo apt-get update
sudo apt-get install -y openjdk-11-jdk wget gnupg2 software-properties-common
wget -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/null
sudo apt-get update
sudo apt-get install -y jenkins
sudo systemctl enable --now jenkins
echo "Jenkins 初始管理员密码路径:/var/lib/jenkins/secrets/initialAdminPassword"
Jenkinsfile 流水线脚本
pipeline {
agent any
environment {
JAVA_HOME = '/usr/lib/jvm/java-11-openjdk-amd64'
MAVEN_OPTS = '-Dmaven.test.failure.ignore=true'
}
stages {
stage('拉取代码') {
steps { git branch: 'main', url: 'https://github.com/your-org/your-repo.git' }
}
stage('运行测试') {
steps { sh 'python -m pytest tests/' } // 其他语言可替换为相应测试命令
}
stage('构建打包') {
steps { sh 'mvn -B -DskipTests clean package' } // Node 可用 npm/yarn,Go 可用 go build
}
stage('部署') {
steps { sh './deploy.sh' } // 可替换为 SSH 或 Docker 部署步骤
}
}
post {
always {
echo "构建完成:${currentBuild.fullDisplayName}"
// mail to: 'team@example.com', subject: "构建完成", body: "..."
}
failure {
echo "构建失败,请查看日志:${env.BUILD_URL}"
}
}
}
部署脚本示例
#!/usr/bin/env bash
set -e
JAR_NAME="app.jar"
APP_DIR="/opt/app"
LOG_FILE="$APP_DIR/app.log"
# 备份旧包
[ -f "$APP_DIR/$JAR_NAME" ] && mv "$APP_DIR/$JAR_NAME" "$APP_DIR/${JAR_NAME}.bak.$(date +%F-%H%M%S)"
# 停止旧进程(按端口或进程名)
PID=$(ps -ef | grep "$JAR_NAME" | grep -v grep | awk '{print $2}')
if [ -n "$PID" ]; then
kill -9 "$PID" || true
sleep 3
fi
# 启动新版本
nohup java -jar "$APP_DIR/$JAR_NAME" --spring.profiles.active=prod > "$LOG_FILE" 2>&1 &
echo "已启动 $JAR_NAME,日志:$LOG_FILE"
#!/usr/bin/env bash
set -e
IMAGE="your-registry/your-app:${BUILD_NUMBER}"
CONTAINER="your-app"
# 构建镜像
docker build -t "$IMAGE" .
# 推送镜像(需先在 Jenkins 配置 Docker Hub 凭据)
docker push "$IMAGE"
# 远程部署
ssh user@target "
docker pull $IMAGE
docker stop $CONTAINER || true
docker rm $CONTAINER || true
docker run -d --name $CONTAINER -p 8080:8080 $IMAGE
"
#!/usr/bin/env bash
set -e
BAK_DIR="/opt/backups/jar/$(date +%F)"
mkdir -p "$BAK_DIR"
# 备份产物
cp target/*.jar "$BAK_DIR/"
# 清理 10 天前的备份
find /opt/backups/jar/ -type f -mtime +10 -delete
触发与通知配置要点