✨ 新功能: - 一键自动化部署脚本 (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
148 lines
3.6 KiB
Bash
Executable File
148 lines
3.6 KiB
Bash
Executable File
#!/bin/bash
|
|
# Docker Hosts文件修复脚本 - 解决DNS解析问题
|
|
|
|
G='\033[0;32m'; Y='\033[1;33m'; R='\033[0;31m'; NC='\033[0m'
|
|
log() { echo -e "${G}[INFO]${NC} $1"; }
|
|
warn() { echo -e "${Y}[WARN]${NC} $1"; }
|
|
error() { echo -e "${R}[ERROR]${NC} $1"; }
|
|
|
|
HOSTS_FILE="/etc/hosts"
|
|
DOCKER_ENTRIES="# Docker Registry Fix
|
|
127.0.0.1 iosapp-beta.grammarly.com
|
|
54.87.120.168 registry-1.docker.io
|
|
54.87.120.168 index.docker.io
|
|
54.87.120.168 auth.docker.io
|
|
54.87.120.168 production.cloudflare.docker.com
|
|
52.206.163.69 dseasb33srnds.cloudfront.net"
|
|
|
|
log "=== Docker Hosts修复脚本 ==="
|
|
|
|
# 备份hosts文件
|
|
backup_hosts() {
|
|
log "备份hosts文件..."
|
|
sudo cp $HOSTS_FILE ${HOSTS_FILE}.backup.$(date +%Y%m%d_%H%M%S)
|
|
log "✅ 已备份到 ${HOSTS_FILE}.backup.$(date +%Y%m%d_%H%M%S)"
|
|
}
|
|
|
|
# 清理旧的Docker条目
|
|
clean_old_entries() {
|
|
log "清理旧的Docker条目..."
|
|
sudo sed -i '' '/# Docker/d' $HOSTS_FILE
|
|
sudo sed -i '' '/docker\.io/d' $HOSTS_FILE
|
|
sudo sed -i '' '/grammarly\.com/d' $HOSTS_FILE
|
|
sudo sed -i '' '/cloudfront\.net/d' $HOSTS_FILE
|
|
sudo sed -i '' '/cloudflare\.docker\.com/d' $HOSTS_FILE
|
|
log "✅ 旧条目已清理"
|
|
}
|
|
|
|
# 添加Docker解析条目
|
|
add_docker_entries() {
|
|
log "添加Docker域名解析..."
|
|
echo "$DOCKER_ENTRIES" | sudo tee -a $HOSTS_FILE > /dev/null
|
|
log "✅ Docker域名解析已添加"
|
|
}
|
|
|
|
# 测试Docker连接
|
|
test_docker() {
|
|
log "测试Docker连接..."
|
|
|
|
if docker pull hello-world:latest > /dev/null 2>&1; then
|
|
log "✅ Docker拉取测试成功"
|
|
docker rmi hello-world:latest > /dev/null 2>&1
|
|
return 0
|
|
else
|
|
error "❌ Docker拉取测试失败"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# 显示当前配置
|
|
show_status() {
|
|
log "当前Docker相关hosts条目:"
|
|
grep -E "(docker|grammarly)" $HOSTS_FILE || echo "未找到相关条目"
|
|
}
|
|
|
|
# 恢复备份
|
|
restore_backup() {
|
|
local backup_file="${HOSTS_FILE}.backup.$(date +%Y%m%d)_*"
|
|
local latest_backup=$(ls -t ${HOSTS_FILE}.backup.* 2>/dev/null | head -1)
|
|
|
|
if [ -n "$latest_backup" ]; then
|
|
log "恢复备份: $latest_backup"
|
|
sudo cp "$latest_backup" $HOSTS_FILE
|
|
log "✅ 已恢复备份"
|
|
else
|
|
error "❌ 未找到备份文件"
|
|
fi
|
|
}
|
|
|
|
# 主菜单
|
|
main_menu() {
|
|
echo ""
|
|
echo "选择操作:"
|
|
echo "1) 修复Docker hosts (推荐)"
|
|
echo "2) 清理Docker条目"
|
|
echo "3) 显示当前状态"
|
|
echo "4) 测试Docker连接"
|
|
echo "5) 恢复备份"
|
|
echo "0) 退出"
|
|
echo ""
|
|
|
|
read -p "请选择 (0-5): " choice
|
|
|
|
case $choice in
|
|
1)
|
|
backup_hosts
|
|
clean_old_entries
|
|
add_docker_entries
|
|
test_docker
|
|
;;
|
|
2)
|
|
clean_old_entries
|
|
;;
|
|
3)
|
|
show_status
|
|
;;
|
|
4)
|
|
test_docker
|
|
;;
|
|
5)
|
|
restore_backup
|
|
;;
|
|
0)
|
|
log "退出"
|
|
exit 0
|
|
;;
|
|
*)
|
|
error "无效选择"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# 主函数
|
|
main() {
|
|
# 检查权限
|
|
if [ "$EUID" -eq 0 ]; then
|
|
warn "请不要以root身份运行此脚本"
|
|
exit 1
|
|
fi
|
|
|
|
# 检查Docker是否运行
|
|
if ! docker info > /dev/null 2>&1; then
|
|
warn "Docker未运行或不可用"
|
|
log "请先启动Docker"
|
|
fi
|
|
|
|
while true; do
|
|
main_menu
|
|
echo ""
|
|
read -p "继续操作? (y/n): " continue_choice
|
|
if [[ $continue_choice != "y" && $continue_choice != "Y" ]]; then
|
|
break
|
|
fi
|
|
done
|
|
|
|
log "操作完成!"
|
|
}
|
|
|
|
main "$@" |