Debian下如何实现Jenkins自动化部署
导读:在 Debian 上实现 Jenkins 自动化部署 一 环境准备与安装 安装 Java 11(Jenkins 2.x 推荐 LTS 搭配 JDK 11): 执行:sudo apt update && sudo apt...
在 Debian 上实现 Jenkins 自动化部署
一 环境准备与安装
- 安装 Java 11(Jenkins 2.x 推荐 LTS 搭配 JDK 11):
- 执行:
sudo apt update & & sudo apt install -y openjdk-11-jdk - 验证:
java -version
- 执行:
- 安装 Jenkins(官方仓库方式,适配 Debian 稳定版):
- 导入密钥:
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 update & & sudo apt install -y jenkins & & sudo systemctl enable --now jenkins
- 导入密钥:
- 访问与初始化:
- 打开浏览器访问:http://< 服务器IP> :8080
- 初始密码:
sudo cat /var/lib/jenkins/secrets/initialAdminPassword - 完成“安装推荐插件”与创建管理员账户。
二 安全与网络配置
- 防火墙放行端口(如使用 UFW):
sudo ufw allow 8080/tcp- 如启用 Jenkins Agent 通信,放行:sudo ufw allow 50000/tcp
- 重载:
sudo ufw reload
- 安全加固建议:
- 禁用匿名访问,启用登录安全策略(如“Logged-in users can do anything”)
- 插件更新源可替换为国内镜像(可选,提升下载速度):https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
- 定期更新 Jenkins 与插件 以修复安全漏洞。
三 创建流水线任务与触发方式
- 准备代码仓库与凭据:
- 在 Jenkins 管理界面:Manage Jenkins → Manage Credentials → System → Global credentials 添加凭据(如 SSH 私钥 或 用户名/密码)
- 如使用 GitHub/GitLab,建议配置 Deploy Keys 或 Personal Access Token
- 新建任务:
- 选择 Pipeline,在 Pipeline 部分选择 Pipeline script from SCM,配置 Git 仓库与凭据,指定 Jenkinsfile 路径(如:Jenkinsfile)
- 触发方式(二选一或同时启用):
- 轮询 SCM(简单但延迟较高):在“Build Triggers”中配置 Poll SCM,如
H/5 * * * *(每 5 分钟检查一次变更) - Webhook(实时):在 GitHub/GitLab 项目设置中添加 Webhook,指向 Jenkins 任务(示例:
http://< JENKINS_URL> /project/< JOB_NAME>),必要时配置 Secret Token 提高安全性。
- 轮询 SCM(简单但延迟较高):在“Build Triggers”中配置 Poll SCM,如
四 示例 Jenkinsfile 与部署方式
- 方式 A(SSH 发布插件,适合推送到目标服务器)
- 先在 Manage Jenkins → Configure System → Publish over SSH 配置目标主机与凭据(如名称:prod-ssh)
- 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' ) ] ) ] ) } } } }
- 方式 B(SSH 执行远程脚本,适合滚动更新、备份与回滚)
- 在目标服务器准备部署脚本 /opt/scripts/deploy.sh(示例):
#!/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 & - Jenkinsfile 片段:
stage('Deploy via SSH') { steps { sh ''' ssh user@prod-server 'bash /opt/scripts/deploy.sh' ''' } }
- 在目标服务器准备部署脚本 /opt/scripts/deploy.sh(示例):
- 方式 C(容器内运行 Spring Boot,便于隔离与回滚)
- 目标机需安装 Docker,Jenkins 使用 SSH 执行:
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} ''' ''' } } - 建议配合镜像仓库(如 Nexus/Harbor)与固定标签策略(如
latest、v< 版本>)实现快速回滚。
- 目标机需安装 Docker,Jenkins 使用 SSH 执行:
五 常见问题与优化建议
- 权限与 sudo:
- 若 Jenkins 通过 SSH 执行部署脚本,建议使用 受限用户 + sudo 免密执行必要命令(如 systemctl/docker),避免直接使用 root
- 构建环境一致性:
- 使用 Jenkins 工具安装器 管理 JDK/Maven/Git,避免“本机可用、构建机失败”
- 日志与通知:
- 在 post 阶段输出构建状态,结合邮件或企业微信/钉钉 Webhook 做失败告警
- 回滚策略:
- 保留最近 N 次构建产物(如按时间清理旧备份),回滚时直接切换到备份包或指定镜像标签
- 高可用与扩展:
- 生产环境建议 Master/Agent 分离,Agent 按标签调度构建任务,提升并发与隔离性。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Debian下如何实现Jenkins自动化部署
本文地址: https://pptw.com/jishu/769448.html
