Files
bruno 8c3881bf89 🚀 feat: 企业级CI/CD基础设施完整部署方案
✨ 新功能:
- 一键自动化部署脚本 (build-infra.sh)
- 统一端口配置 (3开头端口,避免冲突)
- 多平台Docker构建支持 (AMD64 + ARM64)
- Jenkins Configuration as Code (零手动配置)
- 完整的服务验证和健康检查

🏗️ 核心组件:
- Jenkins LTS + JDK21 (端口38080)
- Gitea 1.21 (端口33000, SSH: 32222)
- Docker Registry + UI (端口35001/35002)
- 统一cicd-network网络

📋 管理工具:
- 自动化部署和验证脚本
- 健康检查和日志管理工具
- 完整的文档和故障排查指南

🎯 已验证功能:
- 所有服务正常启动和运行
- API和Web界面完全可访问
- 多平台构建环境就绪
- 完整的CI/CD流水线支持

适用环境: Mac Studio M2 + Docker Desktop
2025-08-23 22:11:50 +08:00

170 lines
4.5 KiB
Bash
Executable File

#!/bin/bash
# Jenkins管理脚本 - 持久化配置和高效运行
set -e
BASE_DIR="/Users/brunogao/work/infra"
JENKINS_HOME="$BASE_DIR/data/jenkins"
BACKUP_DIR="$BASE_DIR/backup/jenkins"
CONFIG_DIR="$BASE_DIR/docker/compose/jenkins"
# 创建必要目录
init_dirs() {
mkdir -p "$JENKINS_HOME" "$BACKUP_DIR" "$CONFIG_DIR"/{config,plugins,scripts}
echo "✓ 目录初始化完成"
}
# 备份Jenkins配置
backup_jenkins() {
local timestamp=$(date +%Y%m%d_%H%M%S)
local backup_file="$BACKUP_DIR/jenkins_backup_$timestamp.tar.gz"
echo "开始备份Jenkins配置..."
tar -czf "$backup_file" -C "$JENKINS_HOME" \
config.xml jobs/ plugins/ secrets/ users/ \
2>/dev/null || true
echo "✓ 备份完成: $backup_file"
}
# 恢复Jenkins配置
restore_jenkins() {
local backup_file="$1"
if [[ -z "$backup_file" ]]; then
echo "❌ 请指定备份文件路径"
return 1
fi
echo "恢复Jenkins配置..."
tar -xzf "$backup_file" -C "$JENKINS_HOME"
docker-compose -f "$BASE_DIR/docker/compose/jenkins-compose.yml" restart jenkins
echo "✓ 恢复完成"
}
# 优化Jenkins性能
optimize_jenkins() {
echo "优化Jenkins性能..."
# 清理旧构建
find "$JENKINS_HOME/jobs" -name "builds" -type d -exec find {} -name "*" -mtime +30 -delete \; 2>/dev/null || true
# 清理工作空间
find "$JENKINS_HOME/workspace" -type d -mtime +7 -exec rm -rf {} + 2>/dev/null || true
# 清理日志
find "$JENKINS_HOME/logs" -name "*.log" -mtime +7 -delete 2>/dev/null || true
echo "✓ 性能优化完成"
}
# 安装推荐插件
install_plugins() {
local plugins=(
"build-timeout" "credentials-binding" "timestamper" "ws-cleanup"
"ant" "gradle" "pipeline-stage-view" "git" "gitea" "docker-plugin"
"docker-build-step" "docker-commons" "docker-workflow"
"configuration-as-code" "job-dsl" "blueocean"
)
echo "安装推荐插件..."
for plugin in "${plugins[@]}"; do
echo "$plugin:latest" >> "$CONFIG_DIR/plugins/plugins.txt"
done
echo "✓ 插件列表已更新"
}
# 健康检查
health_check() {
echo "Jenkins健康检查..."
# 检查服务状态
if curl -s "http://localhost:8081/jenkins/login" > /dev/null; then
echo "✓ Jenkins服务正常"
else
echo "❌ Jenkins服务异常"
return 1
fi
# 检查磁盘空间
local disk_usage=$(df -h "$JENKINS_HOME" | awk 'NR==2 {print $5}' | sed 's/%//')
if [[ $disk_usage -gt 80 ]]; then
echo "⚠️ 磁盘使用率过高: ${disk_usage}%"
else
echo "✓ 磁盘空间充足: ${disk_usage}%"
fi
# 检查内存使用
local memory_info=$(docker stats jenkins --no-stream --format "table {{.MemUsage}}")
echo "✓ 内存使用: $memory_info"
}
# 启动Jenkins
start_jenkins() {
echo "启动Jenkins服务..."
cd "$BASE_DIR/docker/compose"
docker-compose -f jenkins-compose.yml up -d
# 等待服务启动
echo "等待Jenkins启动..."
for i in {1..30}; do
if curl -s "http://localhost:8081/jenkins/login" > /dev/null; then
echo "✓ Jenkins启动成功"
return 0
fi
sleep 5
done
echo "❌ Jenkins启动超时"
return 1
}
# 停止Jenkins
stop_jenkins() {
echo "停止Jenkins服务..."
cd "$BASE_DIR/docker/compose"
docker-compose -f jenkins-compose.yml down
echo "✓ Jenkins已停止"
}
# 显示菜单
show_menu() {
echo "=== Jenkins管理工具 ==="
echo "1. 初始化环境"
echo "2. 启动Jenkins"
echo "3. 停止Jenkins"
echo "4. 备份配置"
echo "5. 恢复配置"
echo "6. 性能优化"
echo "7. 安装插件"
echo "8. 健康检查"
echo "9. 退出"
echo -n "选择操作: "
}
# 主程序
main() {
while true; do
show_menu
read -r choice
case $choice in
1) init_dirs ;;
2) start_jenkins ;;
3) stop_jenkins ;;
4) backup_jenkins ;;
5)
echo -n "输入备份文件路径: "
read -r backup_file
restore_jenkins "$backup_file"
;;
6) optimize_jenkins ;;
7) install_plugins ;;
8) health_check ;;
9) exit 0 ;;
*) echo "❌ 无效选择" ;;
esac
echo "按回车键继续..."
read -r
done
}
# 如果直接运行脚本
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
main "$@"
fi