169 lines
4.4 KiB
Bash
169 lines
4.4 KiB
Bash
|
#!/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
|
|||
|
"
|