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

60 lines
1.7 KiB
Bash
Executable File

#!/bin/bash
# Gitea Docker 命名卷备份脚本
# 使用方法: ./backup-gitea-volume.sh [backup_name]
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)"
BACKUP_DIR="${PROJECT_ROOT}/backup/gitea"
VOLUME_NAME="compose_gitea-data"
COMPOSE_FILE="${PROJECT_ROOT}/docker/compose/gitea-compose.yml"
# 创建备份目录
mkdir -p "${BACKUP_DIR}"
# 生成备份名称
BACKUP_NAME="${1:-gitea-volume-$(date +%Y%m%d-%H%M%S)}"
BACKUP_PATH="${BACKUP_DIR}/${BACKUP_NAME}"
echo "🔄 开始备份 Gitea Docker 卷..."
echo "📦 卷名称: ${VOLUME_NAME}"
echo "💾 备份到: ${BACKUP_PATH}.tar.gz"
# 检查卷是否存在
if ! docker volume inspect "${VOLUME_NAME}" >/dev/null 2>&1; then
echo "❌ 错误: Docker 卷 '${VOLUME_NAME}' 不存在"
exit 1
fi
# 停止容器(确保数据一致性)
echo "⏸️ 停止 Gitea 容器..."
cd "${PROJECT_ROOT}/docker/compose"
docker-compose -f gitea-compose.yml stop gitea
# 使用临时容器备份卷数据
echo "📦 创建备份..."
docker run --rm \
-v "${VOLUME_NAME}:/source:ro" \
-v "${BACKUP_DIR}:/backup" \
busybox \
tar -czf "/backup/${BACKUP_NAME}.tar.gz" -C /source .
# 重启容器
echo "🚀 重启 Gitea 容器..."
docker-compose -f gitea-compose.yml start gitea
echo "✅ 备份完成: ${BACKUP_PATH}.tar.gz"
echo "📊 备份大小: $(du -h "${BACKUP_PATH}.tar.gz" | cut -f1)"
# 显示卷信息
echo "📋 卷信息:"
docker volume inspect "${VOLUME_NAME}" --format "{{.Mountpoint}}"
# 清理旧备份(保留最近5个)
echo "🧹 清理旧备份..."
cd "${BACKUP_DIR}"
ls -t gitea-volume-*.tar.gz 2>/dev/null | tail -n +6 | xargs rm -f 2>/dev/null || true
echo "🎉 备份任务完成!"