阅读量:1
Debian上Jenkins自动化部署常用脚本与示例
脚本类型与适用场景
- Bash 安装脚本:一键在 Debian 上安装 Java 11、添加 Jenkins APT 源、安装并启动 Jenkins,适合快速搭建 CI/CD 环境。
- Jenkinsfile 流水线脚本:定义 拉取代码 → 构建 → 测试 → 部署 全流程,支持从 SCM 加载,便于版本化管理与复用。
- 部署脚本:包括本地或远程 SSH 部署 JAR、Docker 镜像构建与推送、以及 备份与回滚 等常见生产动作。
Bash 一键安装脚本
- 作用:自动安装 OpenJDK 11、导入 Jenkins GPG 密钥、添加官方仓库、安装 Jenkins 并启动服务,同时输出初始管理员密码路径。
- 示例脚本(保存为 install_jenkins.sh):
#!/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"
- 使用要点:
- 执行:chmod +x install_jenkins.sh && sudo ./install_jenkins.sh
- 防火墙放行:sudo ufw allow 8080/tcp
- 生产建议:修改默认端口并配置 SSL/TLS。
Jenkinsfile 流水线脚本
- 作用:以代码方式编排 拉取代码 → 运行测试 → 构建打包 → 部署,可从 Git 仓库加载,便于团队协作与审计。
- 示例(多语言/多场景通用):
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}"
}
}
}
- 使用要点:
- 在任务中选择 Pipeline script from SCM,指定仓库与 Jenkinsfile 路径。
- 通过 Credentials Binding 管理密钥与敏感变量。
部署脚本示例
- SSH 远程部署 JAR(在目标机上执行或经 sshPublisher 调用)
#!/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"
- Docker 构建与远程部署(Jenkins 节点需能执行 docker 命令)
#!/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
- 使用要点:
- 远程执行可通过 sshPublisher 或 sshagent + ssh 完成。
- 若 Jenkins 使用 Docker,需将 jenkins 用户加入 docker 组并重启服务。
触发与通知配置要点
- 代码触发:在 GitHub/GitLab 配置 Webhook,指向 Jenkins 任务;Jenkins 侧启用对应触发器(如 GitHub hook trigger 或 GitLab webhook)。
- 轮询触发:在 Freestyle 任务中使用 Poll SCM(如 H/5 * * * * 每 5 分钟检查一次变更)。
- 通知:在 post 阶段使用 mail 步骤或企业微信/钉钉 Webhook 发送构建结果。
以上就是关于“Debian Jenkins部署的自动化脚本有哪些”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm