- 修改Jenkinsfile支持SSH用户名密码认证方式 - 添加JENKINS_PANEL_GUIDE.md详细操作指南 - 添加QUICK_START.md快速配置清单 - 添加服务器配置脚本支持用户名密码认证 - 更新配置文档和部署说明
266 lines
7.0 KiB
Bash
266 lines
7.0 KiB
Bash
#!/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 ""
|