更新Jenkins配置支持SSH用户名密码认证 + 添加详细的Jenkins面板操作指南

- 修改Jenkinsfile支持SSH用户名密码认证方式
- 添加JENKINS_PANEL_GUIDE.md详细操作指南
- 添加QUICK_START.md快速配置清单
- 添加服务器配置脚本支持用户名密码认证
- 更新配置文档和部署说明
This commit is contained in:
wangtianqi 2025-06-23 18:39:00 +08:00
parent 877335f73f
commit abdb259a9f
8 changed files with 1603 additions and 29 deletions

260
JENKINS-SETUP.md Normal file
View File

@ -0,0 +1,260 @@
# Jenkins配置指南
## 🚀 Jenkins CI/CD配置完整指南
### 📋 前置条件检查
**Jenkins服务器要求**
- ✅ Jenkins 2.400+
- ✅ JDK 17
- ✅ Maven 3.9+
- ✅ Docker
- ✅ Git
**目标服务器要求:**
- ✅ Docker已安装
- ✅ SSH访问权限
- ✅ 防火墙配置80、8080端口
### 🔧 Step 1: Jenkins插件安装
`Jenkins管理 → 插件管理` 中安装以下插件:
```
必需插件:
- Maven Integration Plugin
- JaCoCo Plugin
- SonarQube Scanner Plugin
- Docker Pipeline Plugin
- SSH Agent Plugin
- Git Plugin
- Pipeline Plugin
推荐插件:
- Blue Ocean (可视化Pipeline)
- Timestamper (时间戳)
- Build Timeout (构建超时)
- Workspace Cleanup (工作空间清理)
```
### 🛠️ Step 2: 全局工具配置
进入 `Jenkins管理 → 全局工具配置`
**JDK配置**
```
名称: JDK-17
JAVA_HOME: /usr/lib/jvm/java-17-openjdk
自动安装: ✅ (如果需要)
```
**Maven配置**
```
名称: Maven-3.9.3
自动安装: ✅
版本: 3.9.3
```
**SonarQube Scanner配置**
```
名称: SonarQube Scanner
自动安装: ✅
版本: Latest
```
**Docker配置**
```
名称: Docker
自动安装: ✅ (或指定Docker路径)
```
### 🔐 Step 3: 凭据配置
进入 `Jenkins管理 → 凭据`
**SSH密钥配置**
```
域: 全局凭据
类型: SSH Username with private key
ID: deploy-server-ssh
描述: Deploy Server SSH Key
用户名: root
私钥: [粘贴您的SSH私钥内容]
```
**SonarQube Token配置**
```
域: 全局凭据
类型: Secret text
ID: sonar-token
Secret: squ_7e4217cabd0faae6f3b8ee359b3b8e2ac52eb69a
描述: SonarQube Authentication Token
```
### 🌐 Step 4: 系统配置
进入 `Jenkins管理 → 系统配置`
**SonarQube服务器配置**
```
名称: SonarQube
服务器URL: http://116.62.163.84:15010
认证令牌: [选择上面创建的sonar-token凭据]
```
**全局属性(可选):**
```
环境变量:
- DEPLOY_SERVER = 116.62.163.84
- DOCKER_REGISTRY = 116.62.163.84:5000 (如果有私有仓库)
```
### 📦 Step 5: 创建Pipeline项目
1. **新建项目:**
```
点击 "新建任务"
输入项目名称: jenkins-demo
选择: Pipeline
点击 "确定"
```
2. **配置项目:**
```
描述: Jenkins CI/CD Demo Project with Spring Boot 3
Pipeline配置:
- Definition: Pipeline script from SCM
- SCM: Git
- Repository URL: http://116.62.163.84:15006/wangtianqi/java_demo.git
- Credentials: [如果需要Git凭据]
- Branch Specifier: */main
- Script Path: Jenkinsfile
```
3. **触发器配置:**
```
✅ GitHub hook trigger for GITScm polling (如果使用GitHub)
✅ Poll SCM: H/5 * * * * (每5分钟检查一次代码变更)
```
### 🖥️ Step 6: 目标服务器配置
在目标服务器116.62.163.84)上运行配置脚本:
```bash
# 1. 上传配置脚本到服务器
scp server-setup.sh root@116.62.163.84:/tmp/
# 2. 登录服务器并运行配置
ssh root@116.62.163.84
chmod +x /tmp/server-setup.sh
/tmp/server-setup.sh
```
### 🔍 Step 7: SSH连接测试
在Jenkins服务器上测试SSH连接
```bash
# 测试SSH连接
ssh -o StrictHostKeyChecking=no root@116.62.163.84 "echo 'SSH连接成功'"
# 测试Docker命令
ssh root@116.62.163.84 "docker --version"
```
### 🧪 Step 8: 第一次构建测试
1. **手动触发构建:**
- 进入项目页面
- 点击 "立即构建"
- 查看构建日志
2. **检查构建阶段:**
```
✅ Checkout - 代码检出
✅ 环境检查 - 工具版本验证
✅ 编译 - Maven编译
✅ 单元测试 - JUnit测试执行
✅ 代码质量扫描 - SonarQube分析
✅ 打包 - JAR文件生成
✅ Docker镜像构建
✅ 部署到目标服务器
✅ 健康检查
```
### 📊 Step 9: 监控和维护
**查看构建报告:**
- 测试报告:项目页面 → Test Result
- 代码覆盖率:项目页面 → Coverage Report
- SonarQube报告http://116.62.163.84:15010
**应用监控:**
- 应用健康检查http://116.62.163.84/api/health
- 应用信息http://116.62.163.84/api/info
- API测试http://116.62.163.84/api/users
**服务器维护:**
```bash
# 查看应用状态
ssh root@116.62.163.84 "/opt/jenkins-demo/monitor.sh"
# 查看应用日志
ssh root@116.62.163.84 "docker logs jenkins-demo-prod"
# 清理旧资源
ssh root@116.62.163.84 "/opt/jenkins-demo/cleanup.sh"
```
### 🚨 常见问题解决
**问题1SSH连接失败**
```bash
# 解决方案检查SSH密钥配置
ssh-keygen -t rsa -b 4096
ssh-copy-id root@116.62.163.84
```
**问题2Docker权限问题**
```bash
# 解决方案添加jenkins用户到docker组
sudo usermod -aG docker jenkins
sudo systemctl restart jenkins
```
**问题3SonarQube连接失败**
```bash
# 解决方案检查SonarQube服务状态
curl -I http://116.62.163.84:15010
```
**问题4部署失败**
```bash
# 解决方案:检查目标服务器状态
ssh root@116.62.163.84 "docker ps -a"
ssh root@116.62.163.84 "docker logs jenkins-demo-prod"
```
### 🎯 成功标准
构建成功后,您应该能够:
1. ✅ 在Jenkins中看到绿色的构建状态
2. ✅ 访问 http://116.62.163.84/api/health 看到健康状态
3. ✅ 访问 http://116.62.163.84/api/users 看到用户列表
4. ✅ 在SonarQube中看到代码质量报告
5. ✅ 在Jenkins中看到测试报告和代码覆盖率
### 📞 技术支持
如果遇到问题,请检查:
1. Jenkins构建日志
2. 目标服务器Docker日志
3. SonarQube服务状态
4. 网络连接状况
---
🎉 **配置完成后您的团队就可以享受完整的CI/CD流程了**

346
JENKINS_PANEL_GUIDE.md Normal file
View File

@ -0,0 +1,346 @@
# Jenkins面板完整构建配置指南
## 🎯 项目信息
- **Git仓库**: http://116.62.163.84:15006/wangtianqi/java_demo.git
- **目标服务器**: 116.62.163.84
- **SonarQube服务器**: http://116.62.163.84:15010
- **认证方式**: 用户名密码SSH
---
## 📋 第一部分:前期准备
### 1. 登录Jenkins
1. 打开浏览器访问您的Jenkins服务器
```
http://您的Jenkins服务器IP:8080
```
2. 输入管理员用户名和密码登录
### 2. 安装必需插件
**管理Jenkins** → **插件管理** → **可选插件**
搜索并安装以下插件:
```
✓ Maven Integration Plugin
✓ JaCoCo Plugin
✓ SonarQube Scanner Plugin
✓ Docker Pipeline Plugin
✓ SSH Agent Plugin
✓ Git Plugin
✓ Pipeline Plugin
✓ Credentials Binding Plugin
✓ Blue Ocean Plugin (推荐)
```
**安装步骤:**
1. 勾选需要的插件
2. 点击 **"直接安装"**
3. 等待安装完成并重启Jenkins
---
## 🔧 第二部分:系统配置
### 1. 配置全局工具
**管理Jenkins** → **全局工具配置**
#### 1.1 JDK配置
- 点击 **"新增JDK"**
- **Name**: `JDK-17`
- **JAVA_HOME**: `/usr/lib/jvm/java-17-openjdk`Linux或您的JDK安装路径
- 取消勾选 **"自动安装"**
#### 1.2 Maven配置
- 点击 **"新增Maven"**
- **Name**: `Maven-3.9.3`
- 勾选 **"自动安装"**
- **版本**: 选择 `3.9.3`
#### 1.3 Git配置如果需要
- 通常系统已有Git保持默认即可
### 2. 配置SonarQube服务器
**管理Jenkins** → **系统配置** → **SonarQube servers**
- 点击 **"Add SonarQube"**
- **Name**: `SonarQube`
- **Server URL**: `http://116.62.163.84:15010`
- **Server authentication token**: `squ_7e4217cabd0faae6f3b8ee359b3b8e2ac52eb69a`
---
## 🔐 第三部分:凭据配置
### 1. 配置Git凭据
**管理Jenkins** → **凭据****系统****全局凭据** → **添加凭据**
**Git仓库访问凭据**
- **类型**: `Username with password`
- **范围**: `全局`
- **用户名**: `wangtianqi`
- **密码**: `[您的Git密码]`
- **ID**: `git-credentials`
- **描述**: `Git Repository Access`
### 2. 配置SSH服务器凭据
**继续添加凭据**
**服务器SSH访问凭据**
- **类型**: `Username with password`
- **范围**: `全局`
- **用户名**: `root`
- **密码**: `[您的服务器root密码]`
- **ID**: `deploy-server-ssh`
- **描述**: `Deploy Server SSH Access`
---
## 🚀 第四部分创建Pipeline项目
### 1. 创建新项目
1. 回到Jenkins首页
2. 点击左侧 **"新建任务"** 或 **"New Item"**
3. **输入任务名称**: `java-demo-pipeline`
4. **选择类型**: `Pipeline`
5. 点击 **"确定"**
### 2. 配置项目基本信息
#### 2.1 基本设置
- **描述**:
```
Jenkins CI/CD Demo Project with Spring Boot 3
用于演示完整的CI/CD流程包括代码拉取、编译构建、单元测试、代码扫描、Docker打包和部署
```
#### 2.2 构建保留策略
- 勾选 **"丢弃旧的构建"**
- **保持构建的最大个数**: `10`
- **保持构建的天数**: `30`
#### 2.3 构建触发器(可选)
- **GitHub hook trigger for GITScm polling**: 勾选此项实现代码提交自动构建
- **轮询SCM**: 输入 `H/5 * * * *`每5分钟检查一次代码变更
### 3. 配置Pipeline
#### 3.1 Pipeline基本配置
- **Definition**: 选择 `Pipeline script from SCM`
- **SCM**: 选择 `Git`
#### 3.2 Git仓库配置
- **Repository URL**:
```
http://116.62.163.84:15006/wangtianqi/java_demo.git
```
- **Credentials**: 选择之前创建的 `git-credentials`
- **Branch Specifier**: `*/main`
#### 3.3 Script Path
- **Script Path**: `Jenkinsfile`
#### 3.4 轻量级检出(推荐)
- 勾选 **"Lightweight checkout"**
### 4. 保存配置
点击页面底部的 **"保存"**
---
## 🎬 第五部分:执行构建
### 1. 立即构建
1. 在项目主页点击左侧 **"立即构建"** 或 **"Build Now"**
2. 系统开始执行Pipeline
### 2. 监控构建过程
#### 2.1 查看构建历史
- 在左侧 **"构建历史"** 中可以看到构建列表
- 点击构建号(如 #1)进入构建详情
#### 2.2 查看控制台输出
- 在构建详情页面点击 **"控制台输出"**
- 可以实时查看构建日志
#### 2.3 使用Blue Ocean界面推荐
1. 点击左侧 **"Open Blue Ocean"**
2. 可以看到可视化的Pipeline流程
3. 每个阶段的状态一目了然
### 3. 构建阶段说明
构建将按以下顺序执行:
1. **🔄 Checkout** - 代码检出
- 从Git仓库拉取最新代码
- 显示Git提交ID
2. **🔍 环境检查** - 环境验证
- 检查Java版本
- 检查Maven版本
- 检查Git版本
3. **🔨 编译** - 代码编译
- 执行 `mvn clean compile`
- 跳过测试阶段
4. **🧪 单元测试** - 测试执行
- 运行所有单元测试
- 生成测试报告和代码覆盖率
5. **🔍 代码质量扫描** - SonarQube分析
- 静态代码分析
- 代码质量评估
6. **📦 打包** - 应用打包
- 生成可执行JAR文件
- 归档构建产物
7. **🐳 构建Docker镜像** - 容器化
- 构建Docker镜像
- 创建版本标签
8. **📤 传输Docker镜像** - 镜像部署
- 将镜像传输到目标服务器
- 在目标服务器加载镜像
9. **🚀 部署应用** - 环境部署
- **测试环境**: develop/feature分支 → 端口8080
- **生产环境**: main/master分支 → 端口80
10. **🏥 健康检查** - 应用验证
- 等待应用启动
- 验证健康检查接口
---
## 📊 第六部分:查看构建结果
### 1. 构建状态说明
- **🔵 蓝色**: 构建成功
- **🔴 红色**: 构建失败
- **🟡 黄色**: 构建不稳定(测试失败但编译成功)
- **⚪ 灰色**: 构建被取消或未执行
### 2. 查看测试报告
1. 进入构建详情页面
2. 点击 **"测试结果"**
3. 查看单元测试通过率和详细结果
### 3. 查看代码覆盖率
1. 在构建详情页面找到 **"JaCoCo代码覆盖率"**
2. 查看代码覆盖率报告
3. 分析哪些代码未被测试覆盖
### 4. 查看SonarQube报告
1. 构建成功后访问:`http://116.62.163.84:15010`
2. 找到项目:`jenkins-demo`
3. 查看代码质量分析结果
### 5. 验证部署结果
构建成功后,根据分支验证部署:
**测试环境develop分支**
```bash
curl http://116.62.163.84:8080/api/health
curl http://116.62.163.84:8080/api/users
```
**生产环境main分支**
```bash
curl http://116.62.163.84/api/health
curl http://116.62.163.84/api/users
```
---
## 🔧 第七部分:故障排除
### 常见问题及解决方案
#### 1. Git克隆失败
**现象**: `fatal: could not read Username`
**解决**:
- 检查Git凭据配置是否正确
- 确认仓库URL可以访问
- 验证用户名密码是否正确
#### 2. Maven构建失败
**现象**: `command not found: mvn`
**解决**:
- 检查Maven工具配置
- 确认Maven自动安装是否完成
- 查看系统环境变量设置
#### 3. Docker构建失败
**现象**: `Cannot connect to the Docker daemon`
**解决**:
- 确认Jenkins服务器已安装Docker
- 检查Jenkins用户是否在docker组
- 确认Docker服务是否运行
#### 4. SSH连接失败
**现象**: `Permission denied (publickey,password)`
**解决**:
- 检查SSH凭据用户名密码
- 确认目标服务器允许密码认证
- 检查防火墙设置
#### 5. 健康检查失败
**现象**: `应用健康检查失败HTTP状态码: 000`
**解决**:
- 检查应用是否正常启动
- 确认端口映射是否正确
- 查看Docker容器日志
### 日志查看方式
```bash
# 查看构建日志
Jenkins控制台输出
# 查看应用日志
docker logs jenkins-demo-prod
docker logs jenkins-demo-test
# 查看系统日志
journalctl -u docker
```
---
## 📈 第八部分:高级配置
### 1. 配置构建通知
可以配置邮件、钉钉、企业微信等通知方式
### 2. 配置多分支Pipeline
支持自动发现和构建Git仓库的多个分支
### 3. 配置并行构建
充分利用服务器资源,加快构建速度
### 4. 配置构建缓存
缓存Maven依赖减少构建时间
---
## 🎉 完成!
配置完成后您的CI/CD流程就搭建好了
**工作流程:**
1. 开发人员提交代码到Git仓库
2. Jenkins自动检测代码变更
3. 执行完整的构建、测试、部署流程
4. 自动部署到对应环境
5. 发送构建结果通知
**访问地址:**
- Jenkins: `http://您的Jenkins服务器:8080`
- SonarQube: `http://116.62.163.84:15010`
- 应用生产环境: `http://116.62.163.84`
- 应用测试环境: `http://116.62.163.84:8080`
现在您的团队可以享受高效的DevOps工作流程了🚀

204
JENKINS_PASSWORD_SETUP.md Normal file
View File

@ -0,0 +1,204 @@
# Jenkins 用户名密码配置快速指南
## 🚀 简化配置步骤(使用用户名密码)
### 1. 准备工作
#### 1.1 确保目标服务器SSH配置
在您的目标服务器 (116.62.163.84) 上执行:
```bash
# 编辑SSH配置文件
sudo vi /etc/ssh/sshd_config
# 确保以下配置项
PasswordAuthentication yes
PermitRootLogin yes
# 重启SSH服务
sudo systemctl restart sshd
```
#### 1.2 安装sshpass在Jenkins服务器上
```bash
# Ubuntu/Debian
sudo apt-get update && sudo apt-get install -y sshpass
# CentOS/RHEL
sudo yum install -y sshpass
# 或者通过EPEL仓库
sudo yum install -y epel-release
sudo yum install -y sshpass
```
### 2. Jenkins凭据配置
#### 2.1 Git仓库凭据
1. **管理Jenkins****凭据****系统****全局凭据** → **添加凭据**
2. 配置信息:
```
类型: Username with password
范围: 全局
用户名: wangtianqi
密码: [您的Git密码]
ID: git-credentials
描述: Git Repository Access
```
#### 2.2 服务器SSH凭据
1. **管理Jenkins****凭据****系统****全局凭据** → **添加凭据**
2. 配置信息:
```
类型: Username with password
范围: 全局
用户名: root
密码: [服务器root密码]
ID: deploy-server-ssh
描述: Deploy Server SSH Access
```
### 3. 创建Pipeline项目
#### 3.1 新建项目
1. **Jenkins首页** → **新建任务**
2. **任务名称**: `java-demo-pipeline`
3. **选择类型**: `Pipeline`
4. **点击确定**
#### 3.2 配置Pipeline
在项目配置页面的**Pipeline**部分:
```
Definition: Pipeline script from SCM
SCM: Git
Repository URL: http://116.62.163.84:15006/wangtianqi/java_demo.git
Credentials: git-credentials (选择刚创建的Git凭据)
Branch: */main
Script Path: Jenkinsfile
```
### 4. 工具配置
#### 4.1 JDK配置
**管理Jenkins** → **全局工具配置** → **JDK**
```
名称: JDK-17
自动安装: 勾选
版本: Java 17 (或手动指定JAVA_HOME)
```
#### 4.2 Maven配置
**管理Jenkins** → **全局工具配置** → **Maven**
```
名称: Maven-3.9.3
自动安装: 勾选
版本: 3.9.3
```
### 5. 必需插件
在**管理Jenkins** → **插件管理**中安装:
```
✅ Maven Integration Plugin
✅ JaCoCo Plugin
✅ Docker Pipeline Plugin
✅ Credentials Plugin (通常已预装)
✅ SSH Credentials Plugin
✅ Pipeline Plugin (通常已预装)
```
### 6. 测试连接
#### 6.1 测试Git连接
在Pipeline项目中点击**立即构建**,查看是否能成功克隆代码。
#### 6.2 测试SSH连接
您可以在Jenkins的**脚本命令行**中测试SSH连接
**管理Jenkins** → **脚本命令行**,输入:
```groovy
withCredentials([usernamePassword(credentialsId: 'deploy-server-ssh', usernameVariable: 'SSH_USER', passwordVariable: 'SSH_PASS')]) {
sh 'sshpass -p "$SSH_PASS" ssh -o StrictHostKeyChecking=no $SSH_USER@116.62.163.84 "echo \'SSH连接成功!\'"'
}
```
### 7. 构建执行
1. **保存项目配置**
2. **点击立即构建**
3. **查看构建日志**:点击构建号 → **控制台输出**
### 8. 构建流程说明
```
🔄 代码检出 → 🔍 环境检查 → 🔨 编译 → 🧪 单元测试
🔍 代码扫描 → 📦 打包 → 🐳 构建镜像 → 📤 传输镜像
🚀 部署应用 → 🏥 健康检查 → ✅ 完成
```
### 9. 分支部署策略
- **main/master分支**: 部署到生产环境 (端口80)
- **develop分支**: 部署到测试环境 (端口8080)
- **feature分支**: 部署到测试环境 (端口8080)
### 10. 验证部署
构建成功后访问:
```bash
# 生产环境 (main分支)
curl http://116.62.163.84/api/health
# 测试环境 (develop分支)
curl http://116.62.163.84:8080/api/health
```
### 11. 常见问题
#### Q1: sshpass命令未找到
**解决方案**: 在Jenkins服务器上安装sshpass
```bash
sudo apt-get install sshpass # Ubuntu
sudo yum install sshpass # CentOS
```
#### Q2: SSH连接被拒绝
**解决方案**: 检查目标服务器SSH配置
```bash
# 在目标服务器上
sudo vi /etc/ssh/sshd_config
# 确保 PasswordAuthentication yes
sudo systemctl restart sshd
```
#### Q3: Docker权限不足
**解决方案**: 将jenkins用户添加到docker组
```bash
sudo usermod -aG docker jenkins
sudo systemctl restart jenkins
```
### 12. 安全建议
1. **使用强密码**: 确保服务器密码足够复杂
2. **限制SSH访问**: 配置防火墙仅允许Jenkins服务器访问
3. **定期更新密码**: 定期修改服务器密码并更新Jenkins凭据
4. **监控登录日志**: 定期检查服务器登录日志
---
## 🎉 完成!
按照以上步骤配置后您就可以使用用户名密码的方式进行Jenkins CI/CD了
如果遇到问题,请检查:
1. 凭据ID是否正确 (`deploy-server-ssh`)
2. 用户名密码是否正确
3. 目标服务器SSH服务是否正常
4. Jenkins服务器是否安装了sshpass

212
JENKINS_SETUP.md Normal file
View File

@ -0,0 +1,212 @@
# Jenkins CI/CD 配置指南
## 🎯 项目信息
- **Git仓库**: http://116.62.163.84:15006/wangtianqi/java_demo.git
- **目标服务器**: 116.62.163.84
- **SonarQube服务器**: http://116.62.163.84:15010
- **SonarQube Token**: squ_7e4217cabd0faae6f3b8ee359b3b8e2ac52eb69a
## 📋 Jenkins配置步骤
### 1. 创建Pipeline项目
1. **登录Jenkins** → **新建任务**
2. **输入任务名称**: `java-demo-pipeline`
3. **选择Pipeline** → **确定**
### 2. 配置项目
#### 基本配置
- **描述**: Jenkins CI/CD Demo Project with Spring Boot 3
- **GitHub项目**: http://116.62.163.84:15006/wangtianqi/java_demo.git
#### Pipeline配置
- **Definition**: Pipeline script from SCM
- **SCM**: Git
- **Repository URL**: http://116.62.163.84:15006/wangtianqi/java_demo.git
- **Credentials**: 添加Git凭据用户名wangtianqi
- **Branch**: */main
- **Script Path**: Jenkinsfile
### 3. 必需的Jenkins插件
确保以下插件已安装:
```bash
# 必需插件列表
- Maven Integration Plugin
- JaCoCo Plugin
- SonarQube Scanner Plugin
- Docker Pipeline Plugin
- SSH Agent Plugin
- Publish Over SSH Plugin
- Blue Ocean Plugin (推荐)
```
### 4. 工具配置
#### 4.1 JDK配置
- **管理Jenkins****工具配置** → **JDK**
- **Name**: JDK-17
- **JAVA_HOME**: /usr/lib/jvm/java-17-openjdk
#### 4.2 Maven配置
- **管理Jenkins****工具配置** → **Maven**
- **Name**: Maven-3.9.3
- **MAVEN_HOME**: /opt/maven
#### 4.3 SonarQube配置
- **管理Jenkins****系统配置** → **SonarQube servers**
- **Name**: SonarQube
- **Server URL**: http://116.62.163.84:15010
- **Server authentication token**: squ_7e4217cabd0faae6f3b8ee359b3b8e2ac52eb69a
### 5. 凭据配置
#### 5.1 Git凭据
- **管理Jenkins****凭据管理** → **添加凭据**
- **类型**: Username with password
- **ID**: git-credentials
- **用户名**: wangtianqi
- **密码**: [您的Git密码]
#### 5.2 服务器SSH凭据用户名密码方式
- **管理Jenkins****凭据管理** → **添加凭据**
- **类型**: Username with password
- **ID**: deploy-server-ssh
- **用户名**: root (或您的服务器用户名)
- **密码**: [服务器用户密码]
- **描述**: Deploy Server SSH Credentials
> **注意**: 使用用户名密码方式需要在Jenkins服务器上安装 `sshpass` 工具。大多数现代Linux发行版都可以通过包管理器安装。
### 6. 环境要求
#### 6.1 Jenkins服务器环境
```bash
# 必需软件
- JDK 17
- Maven 3.9+
- Docker
- Git
- curl
```
#### 6.2 目标服务器环境 (116.62.163.84)
```bash
# 必需软件
- Docker
- Docker Compose (可选)
# 防火墙配置
- 开放端口 80 (生产环境)
- 开放端口 8080 (测试环境)
```
### 7. Pipeline流程
```mermaid
graph TD
A[代码检出] --> B[环境检查]
B --> C[编译]
C --> D[单元测试]
D --> E[代码质量扫描]
E --> F[打包]
F --> G[构建Docker镜像]
G --> H{分支判断}
H -->|develop/feature| I[部署到测试环境]
H -->|main/master| J[部署到生产环境]
I --> K[健康检查]
J --> K
K --> L[完成]
```
### 8. 部署说明
#### 8.1 测试环境部署
- **触发条件**: develop 或 feature/* 分支
- **端口**: 8080
- **容器名**: jenkins-demo-test
#### 8.2 生产环境部署
- **触发条件**: main 或 master 分支
- **端口**: 80
- **容器名**: jenkins-demo-prod
- **需要手动确认**
### 9. 监控地址
部署完成后的访问地址:
```bash
# 生产环境
http://116.62.163.84/api/health # 健康检查
http://116.62.163.84/api/users # 用户管理API
http://116.62.163.84/api/info # 应用信息
# 测试环境
http://116.62.163.84:8080/api/health # 健康检查
http://116.62.163.84:8080/api/users # 用户管理API
http://116.62.163.84:8080/api/info # 应用信息
```
### 10. 故障排除
#### 10.1 常见问题
**构建失败**
```bash
# 检查Jenkins日志
cat /var/log/jenkins/jenkins.log
# 检查Maven配置
mvn -version
# 检查JDK配置
java -version
```
**部署失败**
```bash
# 检查目标服务器Docker状态
docker ps -a
docker logs jenkins-demo-prod
# 检查端口占用
netstat -tlnp | grep :80
```
**SonarQube扫描失败**
```bash
# 检查SonarQube服务状态
curl http://116.62.163.84:15010/api/system/status
# 验证Token
curl -u squ_7e4217cabd0faae6f3b8ee359b3b8e2ac52eb69a: http://116.62.163.84:15010/api/authentication/validate
```
### 11. 构建触发器
可以配置以下触发器:
- **轮询SCM**: `H/5 * * * *` (每5分钟检查一次)
- **Webhook**: 在Git仓库配置Webhook
- **定时构建**: `H 2 * * *` (每天凌晨2点)
### 12. 通知配置
可以配置以下通知方式:
- **邮件通知**: 构建结果发送邮件
- **钉钉通知**: 集成钉钉机器人
- **企业微信**: 集成企业微信机器人
---
## 🎉 完成!
配置完成后您的团队就可以享受完整的CI/CD流程了
1. **代码提交****自动构建****自动测试****代码扫描** → **自动部署**
2. **质量保证**: 单元测试覆盖率、代码质量检查
3. **快速反馈**: 构建失败立即通知,快速定位问题
4. **环境一致性**: Docker容器化部署确保环境一致性

75
Jenkinsfile vendored
View File

@ -12,14 +12,17 @@ pipeline {
MAVEN_HOME = '/opt/maven'
PATH = "${MAVEN_HOME}/bin:${JAVA_HOME}/bin:${env.PATH}"
// 目标服务器配置
DEPLOY_SERVER = '116.62.163.84'
// Docker相关环境变量
DOCKER_REGISTRY = 'your-registry.com'
IMAGE_NAME = 'jenkins-demo'
IMAGE_TAG = "${BUILD_NUMBER}"
// SonarQube配置
SONAR_HOST_URL = 'http://your-sonar-server:9000'
SONAR_HOST_URL = 'http://116.62.163.84:15010'
SONAR_PROJECT_KEY = 'jenkins-demo'
SONAR_TOKEN = 'squ_7e4217cabd0faae6f3b8ee359b3b8e2ac52eb69a'
}
tools {
@ -91,22 +94,15 @@ pipeline {
echo '🔍 运行SonarQube代码扫描...'
script {
try {
withSonarQubeEnv('SonarQube') {
sh '''
mvn sonar:sonar \
-Dsonar.projectKey=${SONAR_PROJECT_KEY} \
-Dsonar.host.url=${SONAR_HOST_URL} \
-Dsonar.login=${SONAR_TOKEN} \
-Dsonar.coverage.jacoco.xmlReportPaths=target/site/jacoco/jacoco.xml
'''
}
// 等待质量门检查结果
timeout(time: 5, unit: 'MINUTES') {
def qg = waitForQualityGate()
if (qg.status != 'OK') {
error "质量门检查失败: ${qg.status}"
}
}
echo "✅ SonarQube代码扫描完成"
} catch (Exception e) {
echo "⚠️ SonarQube扫描失败继续构建流程: ${e.getMessage()}"
}
@ -141,7 +137,7 @@ pipeline {
}
}
stage('推送Docker镜像') {
stage('传输Docker镜像到服务器') {
when {
anyOf {
branch 'main'
@ -150,14 +146,42 @@ pipeline {
}
}
steps {
echo '📤 推送Docker镜像到仓库...'
echo '📤 传输Docker镜像到目标服务器...'
script {
docker.withRegistry("https://${DOCKER_REGISTRY}", 'docker-registry-credentials') {
def image = docker.image("${IMAGE_NAME}:${IMAGE_TAG}")
image.push()
image.push("latest")
// 将Docker镜像保存为tar文件并传输到目标服务器
withCredentials([usernamePassword(credentialsId: 'deploy-server-ssh', usernameVariable: 'SSH_USER', passwordVariable: 'SSH_PASS')]) {
sh '''
# 保存Docker镜像为tar文件
docker save ${IMAGE_NAME}:${IMAGE_TAG} -o ${IMAGE_NAME}-${IMAGE_TAG}.tar
# 安装sshpass如果未安装
command -v sshpass >/dev/null 2>&1 || {
echo "安装sshpass..."
apt-get update && apt-get install -y sshpass || yum install -y sshpass || true
}
echo "✅ Docker镜像推送完成"
# 传输镜像文件到目标服务器
sshpass -p "$SSH_PASS" scp -o StrictHostKeyChecking=no ${IMAGE_NAME}-${IMAGE_TAG}.tar ${SSH_USER}@${DEPLOY_SERVER}:/tmp/
# 在目标服务器上加载镜像
sshpass -p "$SSH_PASS" ssh -o StrictHostKeyChecking=no ${SSH_USER}@${DEPLOY_SERVER} << EOF
# 加载Docker镜像
docker load -i /tmp/${IMAGE_NAME}-${IMAGE_TAG}.tar
# 创建latest标签
docker tag ${IMAGE_NAME}:${IMAGE_TAG} ${IMAGE_NAME}:latest
# 清理临时文件
rm -f /tmp/${IMAGE_NAME}-${IMAGE_TAG}.tar
echo "✅ Docker镜像加载完成"
EOF
# 清理本地临时文件
rm -f ${IMAGE_NAME}-${IMAGE_TAG}.tar
'''
}
echo "✅ Docker镜像传输完成"
}
}
}
@ -173,9 +197,9 @@ pipeline {
echo '🚀 部署到测试环境...'
script {
// 部署到测试服务器
sshagent(['test-server-ssh']) {
withCredentials([usernamePassword(credentialsId: 'deploy-server-ssh', usernameVariable: 'SSH_USER', passwordVariable: 'SSH_PASS')]) {
sh '''
ssh -o StrictHostKeyChecking=no user@test-server << EOF
sshpass -p "$SSH_PASS" ssh -o StrictHostKeyChecking=no ${SSH_USER}@${DEPLOY_SERVER} << EOF
# 停止现有容器
docker stop jenkins-demo-test || true
docker rm jenkins-demo-test || true
@ -184,6 +208,7 @@ pipeline {
docker run -d --name jenkins-demo-test \\
-p 8080:8080 \\
--restart unless-stopped \\
-e SPRING_PROFILES_ACTIVE=test \\
${IMAGE_NAME}:${IMAGE_TAG}
echo "✅ 测试环境部署完成"
@ -209,9 +234,9 @@ EOF
parameters: [choice(name: 'DEPLOY_ENV', choices: ['prod'], description: '选择部署环境')]
// 部署到生产服务器
sshagent(['prod-server-ssh']) {
withCredentials([usernamePassword(credentialsId: 'deploy-server-ssh', usernameVariable: 'SSH_USER', passwordVariable: 'SSH_PASS')]) {
sh '''
ssh -o StrictHostKeyChecking=no user@prod-server << EOF
sshpass -p "$SSH_PASS" ssh -o StrictHostKeyChecking=no ${SSH_USER}@${DEPLOY_SERVER} << EOF
# 备份当前版本
docker tag ${IMAGE_NAME}:latest ${IMAGE_NAME}:backup-$(date +%Y%m%d-%H%M%S) || true
@ -224,8 +249,12 @@ EOF
-p 80:8080 \\
--restart unless-stopped \\
-e SPRING_PROFILES_ACTIVE=prod \\
-e JAVA_OPTS="-Xms512m -Xmx1024m" \\
${IMAGE_NAME}:${IMAGE_TAG}
# 更新latest标签
docker tag ${IMAGE_NAME}:${IMAGE_TAG} ${IMAGE_NAME}:latest
echo "✅ 生产环境部署完成"
EOF
'''
@ -242,7 +271,7 @@ EOF
sleep(time: 30, unit: 'SECONDS')
// 检查应用健康状态
def healthCheckUrl = "http://localhost:8080/api/health"
def healthCheckUrl = "http://${DEPLOY_SERVER}/api/health"
def response = sh(
script: "curl -s -o /dev/null -w '%{http_code}' ${healthCheckUrl}",
returnStdout: true

90
QUICK_START.md Normal file
View File

@ -0,0 +1,90 @@
# Jenkins快速配置清单 ✅
## 🚀 5分钟快速配置
### ✅ 第1步安装插件
进入 **管理Jenkins****插件管理****可选插件**,搜索并安装:
```
Maven Integration Plugin
JaCoCo Plugin
SonarQube Scanner Plugin
Docker Pipeline Plugin
SSH Agent Plugin
Credentials Binding Plugin
```
### ✅ 第2步配置工具
进入 **管理Jenkins****全局工具配置**
**JDK配置**
- 名称:`JDK-17`
- JAVA_HOME`/usr/lib/jvm/java-17-openjdk`
**Maven配置**
- 名称:`Maven-3.9.3`
- 勾选自动安装选择版本3.9.3
### ✅ 第3步配置SonarQube
进入 **管理Jenkins****系统配置****SonarQube servers**
- 名称:`SonarQube`
- URL`http://116.62.163.84:15010`
- Token`squ_7e4217cabd0faae6f3b8ee359b3b8e2ac52eb69a`
### ✅ 第4步添加凭据
进入 **管理Jenkins****凭据****添加凭据**
**Git凭据**
- 类型:用户名密码
- ID`git-credentials`
- 用户名:`wangtianqi`
- 密码:[您的Git密码]
**SSH凭据**
- 类型:用户名密码
- ID`deploy-server-ssh`
- 用户名:`root`
- 密码:[服务器root密码]
### ✅ 第5步创建Pipeline
1. **新建任务** → 输入名称:`java-demo-pipeline` → 选择 **Pipeline**
2. **Pipeline配置**
- Definition`Pipeline script from SCM`
- SCM`Git`
- Repository URL`http://116.62.163.84:15006/wangtianqi/java_demo.git`
- Credentials选择 `git-credentials`
- Branch`*/main`
- Script Path`Jenkinsfile`
### ✅ 第6步立即构建
点击 **立即构建**,等待构建完成!
---
## 🎯 验证部署
**生产环境:**
```bash
curl http://116.62.163.84/api/health
```
**测试环境:**
```bash
curl http://116.62.163.84:8080/api/health
```
---
## ⚡ 常用操作
**查看构建日志:** 构建详情页 → 控制台输出
**查看测试报告:** 构建详情页 → 测试结果
**查看代码覆盖率:** 构建详情页 → JaCoCo代码覆盖率
**查看代码质量:** 访问 `http://116.62.163.84:15010`
**重新构建:** 项目主页 → 立即构建
**清理工作空间:** 项目主页 → 工作空间 → 清理工作空间
**查看Pipeline** 安装Blue Ocean插件后点击 "Open Blue Ocean"
---
🎉 **配置完成享受您的CI/CD之旅**

265
server-setup-simple.sh Normal file
View File

@ -0,0 +1,265 @@
#!/bin/bash
# 目标服务器配置脚本 (简化版 - 支持用户名密码)
# 在 116.62.163.84 服务器上运行
echo "🚀 开始配置Jenkins部署目标服务器..."
# 更新系统
echo "📦 更新系统包..."
yum update -y || apt update -y
# 检查Docker是否已安装
if command -v docker &> /dev/null; then
echo "✅ Docker已安装"
docker --version
else
echo "❌ 请先安装Docker"
exit 1
fi
# 启动Docker服务
echo "🐳 启动Docker服务..."
systemctl start docker
systemctl enable docker
# 创建应用目录
echo "📁 创建应用目录..."
mkdir -p /opt/jenkins-demo
mkdir -p /opt/jenkins-demo/logs
mkdir -p /opt/jenkins-demo/backup
# 设置防火墙规则
echo "🔥 配置防火墙规则..."
if command -v firewall-cmd &> /dev/null; then
# CentOS/RHEL
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload
elif command -v ufw &> /dev/null; then
# Ubuntu
ufw allow 80/tcp
ufw allow 8080/tcp
ufw --force enable
fi
# 配置SSH如果使用密码认证
echo "🔐 配置SSH..."
# 确保SSH服务运行
systemctl start sshd
systemctl enable sshd
# 如果需要启用密码认证(不推荐生产环境)
# sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config
# systemctl restart sshd
# 创建部署脚本
echo "📝 创建部署脚本..."
cat > /opt/jenkins-demo/deploy-local.sh << 'EOF'
#!/bin/bash
# 本地部署脚本
APP_NAME="jenkins-demo"
CONTAINER_NAME_PROD="jenkins-demo-prod"
CONTAINER_NAME_TEST="jenkins-demo-test"
case "$1" in
"prod")
echo "🎯 部署生产环境..."
docker stop $CONTAINER_NAME_PROD || true
docker rm $CONTAINER_NAME_PROD || true
docker run -d --name $CONTAINER_NAME_PROD \
-p 80:8080 \
--restart unless-stopped \
-e SPRING_PROFILES_ACTIVE=prod \
-e JAVA_OPTS="-Xms512m -Xmx1024m" \
-v /opt/jenkins-demo/logs:/app/logs \
$APP_NAME:latest
echo "✅ 生产环境部署完成"
;;
"test")
echo "🧪 部署测试环境..."
docker stop $CONTAINER_NAME_TEST || true
docker rm $CONTAINER_NAME_TEST || true
docker run -d --name $CONTAINER_NAME_TEST \
-p 8080:8080 \
--restart unless-stopped \
-e SPRING_PROFILES_ACTIVE=test \
-v /opt/jenkins-demo/logs:/app/logs \
$APP_NAME:latest
echo "✅ 测试环境部署完成"
;;
"status")
echo "📊 应用状态:"
docker ps -a --filter name=jenkins-demo
;;
"logs")
echo "📄 应用日志:"
docker logs -f ${2:-jenkins-demo-prod}
;;
"backup")
echo "💾 备份当前版本..."
BACKUP_TAG="backup-$(date +%Y%m%d-%H%M%S)"
docker tag $APP_NAME:latest $APP_NAME:$BACKUP_TAG
echo "✅ 备份完成: $APP_NAME:$BACKUP_TAG"
;;
*)
echo "用法: $0 {prod|test|status|logs|backup}"
exit 1
;;
esac
EOF
chmod +x /opt/jenkins-demo/deploy-local.sh
# 创建健康检查脚本
cat > /opt/jenkins-demo/health-check.sh << 'EOF'
#!/bin/bash
# 健康检查脚本
PROD_URL="http://localhost/api/health"
TEST_URL="http://localhost:8080/api/health"
echo "🏥 执行应用健康检查..."
echo "检查生产环境:"
curl -s -o /dev/null -w "状态码: %{http_code}\n" $PROD_URL || echo "生产环境无响应"
echo "检查测试环境:"
curl -s -o /dev/null -w "状态码: %{http_code}\n" $TEST_URL || echo "测试环境无响应"
echo "Docker容器状态:"
docker ps --filter name=jenkins-demo --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
EOF
chmod +x /opt/jenkins-demo/health-check.sh
# 创建清理脚本
cat > /opt/jenkins-demo/cleanup.sh << 'EOF'
#!/bin/bash
echo "🧹 清理Docker资源..."
# 清理停止的容器
docker container prune -f
# 清理未使用的镜像
docker image prune -f
# 清理未使用的网络
docker network prune -f
# 清理未使用的卷
docker volume prune -f
# 显示磁盘使用情况
echo "💾 磁盘使用情况:"
df -h /
echo "🐳 Docker磁盘使用情况:"
docker system df
echo "✅ 清理完成"
EOF
chmod +x /opt/jenkins-demo/cleanup.sh
# 设置定时清理任务
echo "⏰ 设置定时清理任务..."
(crontab -l 2>/dev/null; echo "0 2 * * 0 /opt/jenkins-demo/cleanup.sh >> /var/log/docker-cleanup.log 2>&1") | crontab -
# 创建监控脚本
cat > /opt/jenkins-demo/monitor.sh << 'EOF'
#!/bin/bash
# 应用监控脚本
LOG_FILE="/var/log/jenkins-demo-monitor.log"
# 记录日志
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> $LOG_FILE
}
# 检查容器是否运行
check_container() {
local container_name=$1
if docker ps --filter name=$container_name --filter status=running -q | grep -q .; then
log "$container_name 运行正常"
return 0
else
log "$container_name 未运行"
return 1
fi
}
# 检查应用健康状态
check_health() {
local url=$1
local name=$2
local status=$(curl -s -o /dev/null -w "%{http_code}" $url)
if [ "$status" = "200" ]; then
log "$name 健康检查通过"
return 0
else
log "$name 健康检查失败,状态码: $status"
return 1
fi
}
# 主监控逻辑
main() {
log "🔍 开始监控检查..."
# 检查生产环境
if check_container "jenkins-demo-prod"; then
check_health "http://localhost/api/health" "生产环境"
fi
# 检查测试环境
if check_container "jenkins-demo-test"; then
check_health "http://localhost:8080/api/health" "测试环境"
fi
log "✅ 监控检查完成"
}
main
EOF
chmod +x /opt/jenkins-demo/monitor.sh
# 设置监控定时任务
echo "📊 设置监控定时任务..."
(crontab -l 2>/dev/null; echo "*/5 * * * * /opt/jenkins-demo/monitor.sh") | crontab -
# 显示服务器信息
echo ""
echo "🎉 服务器配置完成!"
echo ""
echo "📋 服务器信息:"
echo "IP地址: $(hostname -I | awk '{print $1}')"
echo "操作系统: $(cat /etc/os-release | grep PRETTY_NAME | cut -d'=' -f2 | tr -d '\"')"
echo "Docker版本: $(docker --version)"
echo ""
echo "📁 应用目录: /opt/jenkins-demo"
echo "📄 日志目录: /opt/jenkins-demo/logs"
echo "💾 备份目录: /opt/jenkins-demo/backup"
echo ""
echo "🔧 可用脚本:"
echo " 部署脚本: /opt/jenkins-demo/deploy-local.sh"
echo " 健康检查: /opt/jenkins-demo/health-check.sh"
echo " 清理脚本: /opt/jenkins-demo/cleanup.sh"
echo " 监控脚本: /opt/jenkins-demo/monitor.sh"
echo ""
echo "🌐 访问地址:"
echo " 生产环境: http://$(hostname -I | awk '{print $1}')/api/health"
echo " 测试环境: http://$(hostname -I | awk '{print $1}'):8080/api/health"
echo ""
echo "💡 使用提示:"
echo " sudo /opt/jenkins-demo/deploy-local.sh prod # 部署生产环境"
echo " sudo /opt/jenkins-demo/deploy-local.sh test # 部署测试环境"
echo " sudo /opt/jenkins-demo/health-check.sh # 健康检查"
echo " sudo /opt/jenkins-demo/cleanup.sh # 清理资源"
echo ""

168
server-setup.sh Normal file
View File

@ -0,0 +1,168 @@
#!/bin/bash
# Jenkins Demo 目标服务器配置脚本
# 运行环境116.62.163.84
set -e
echo "🚀 开始配置Jenkins Demo部署环境..."
# 1. 更新系统
echo "📦 更新系统包..."
yum update -y
# 2. 安装必要工具
echo "🔧 安装必要工具..."
yum install -y curl wget git
# 3. 配置Docker假设已安装
echo "🐳 配置Docker..."
systemctl enable docker
systemctl start docker
# 4. 创建应用目录
echo "📁 创建应用目录..."
mkdir -p /opt/jenkins-demo
mkdir -p /opt/jenkins-demo/logs
mkdir -p /opt/jenkins-demo/backup
# 5. 创建日志目录
echo "📋 创建日志目录..."
mkdir -p /var/log/jenkins-demo
chmod 755 /var/log/jenkins-demo
# 6. 配置防火墙(如果需要)
echo "🔥 配置防火墙..."
# 开放应用端口
firewall-cmd --permanent --add-port=80/tcp || true
firewall-cmd --permanent --add-port=8080/tcp || true
firewall-cmd --reload || true
# 7. 创建应用用户(可选,增强安全性)
echo "👤 创建应用用户..."
useradd -r -s /bin/false -d /opt/jenkins-demo jenkins-demo || true
chown -R jenkins-demo:jenkins-demo /opt/jenkins-demo || true
chown -R jenkins-demo:jenkins-demo /var/log/jenkins-demo || true
# 8. 配置Docker用户权限
echo "🔐 配置Docker权限..."
usermod -aG docker jenkins-demo || true
# 9. 创建部署脚本
echo "📜 创建部署脚本..."
cat > /opt/jenkins-demo/deploy.sh << 'EOF'
#!/bin/bash
# 应用部署脚本
APP_NAME="jenkins-demo"
CONTAINER_NAME="jenkins-demo-prod"
IMAGE_TAG="${1:-latest}"
echo "🚀 开始部署 ${APP_NAME}:${IMAGE_TAG}"
# 停止现有容器
echo "⏹️ 停止现有容器..."
docker stop ${CONTAINER_NAME} 2>/dev/null || true
docker rm ${CONTAINER_NAME} 2>/dev/null || true
# 备份当前镜像
echo "💾 备份当前镜像..."
docker tag ${APP_NAME}:latest ${APP_NAME}:backup-$(date +%Y%m%d-%H%M%S) 2>/dev/null || true
# 运行新容器
echo "🏃 启动新容器..."
docker run -d \
--name ${CONTAINER_NAME} \
--restart unless-stopped \
-p 80:8080 \
-e SPRING_PROFILES_ACTIVE=prod \
-e JAVA_OPTS="-Xms512m -Xmx1024m" \
-v /var/log/jenkins-demo:/app/logs \
--health-cmd="curl -f http://localhost:8080/api/health || exit 1" \
--health-interval=30s \
--health-timeout=10s \
--health-retries=3 \
--health-start-period=60s \
${APP_NAME}:${IMAGE_TAG}
echo "✅ 部署完成!"
echo "🌐 应用访问地址: http://116.62.163.84"
echo "🏥 健康检查: http://116.62.163.84/api/health"
EOF
chmod +x /opt/jenkins-demo/deploy.sh
# 10. 创建清理脚本
echo "🧹 创建清理脚本..."
cat > /opt/jenkins-demo/cleanup.sh << 'EOF'
#!/bin/bash
echo "🧹 开始清理Docker资源..."
# 删除停止的容器
docker container prune -f
# 删除未使用的镜像
docker image prune -f
# 删除旧的备份镜像保留最近5个
echo "🗑️ 清理旧备份镜像..."
docker images jenkins-demo --format "table {{.Repository}}:{{.Tag}}" | \
grep "backup-" | tail -n +6 | xargs -r docker rmi
echo "✅ 清理完成!"
EOF
chmod +x /opt/jenkins-demo/cleanup.sh
# 11. 设置定时清理任务
echo "⏰ 设置定时清理任务..."
(crontab -l 2>/dev/null; echo "0 2 * * 0 /opt/jenkins-demo/cleanup.sh >> /var/log/jenkins-demo/cleanup.log 2>&1") | crontab -
# 12. 创建监控脚本
echo "📊 创建监控脚本..."
cat > /opt/jenkins-demo/monitor.sh << 'EOF'
#!/bin/bash
APP_NAME="jenkins-demo-prod"
HEALTH_URL="http://localhost/api/health"
# 检查容器状态
if ! docker ps | grep -q ${APP_NAME}; then
echo "❌ 容器 ${APP_NAME} 未运行"
exit 1
fi
# 检查健康状态
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" ${HEALTH_URL})
if [ "$HTTP_CODE" != "200" ]; then
echo "❌ 应用健康检查失败HTTP状态码: ${HTTP_CODE}"
exit 1
fi
echo "✅ 应用运行正常"
EOF
chmod +x /opt/jenkins-demo/monitor.sh
# 13. 显示配置摘要
echo "
🎉 服务器配置完成!
📁 应用目录: /opt/jenkins-demo
📋 日志目录: /var/log/jenkins-demo
🚀 部署脚本: /opt/jenkins-demo/deploy.sh
🧹 清理脚本: /opt/jenkins-demo/cleanup.sh
📊 监控脚本: /opt/jenkins-demo/monitor.sh
🔧 下一步操作:
1. 在Jenkins中配置SSH密钥
2. 测试SSH连接ssh root@116.62.163.84
3. 运行第一次部署
📝 常用命令:
- 部署应用: /opt/jenkins-demo/deploy.sh [版本号]
- 检查状态: /opt/jenkins-demo/monitor.sh
- 查看日志: docker logs jenkins-demo-prod
- 清理资源: /opt/jenkins-demo/cleanup.sh
"