Files
gaoandClaude 70f845cd17 feat: 添加 Harbor 和 GitLab 模块,完善系统配置文档
- 新增 Harbor 容器镜像仓库维护模块
- 新增 GitLab 代码托管平台维护模块
- 创建 SYSTEM-CONFIG.md 系统配置概览文档
- 完善 README.md 项目说明文档
- 更新部署脚本支持新模块
- 集成 Ollama AI 模型服务配置信息

主要功能:
- Harbor: Docker 镜像仓库管理 (端口 8080/8443)
- GitLab: 企业级代码托管 (端口 8890/8929)
- 系统配置文档:便于 Claude 和 CI/CD 理解架构
- 统一备份策略和健康监控
- 模块化部署和管理

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-20 21:22:20 +08:00

252 lines
6.8 KiB
Bash
Executable File

#!/bin/bash
# GitLab CI/CD 环境变量配置脚本
# 用于快速设置项目所需的环境变量
set -e
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# GitLab 配置
GITLAB_URL="http://192.168.1.83:8890"
GITLAB_ADMIN_USER="root"
GITLAB_ADMIN_PASSWORD="admin123"
echo -e "${GREEN}GitLab CI/CD 环境变量配置脚本${NC}"
echo "=================================="
# 使用说明
usage() {
echo -e "${BLUE}用法:${NC}"
echo " $0 [项目名称] [环境类型]"
echo ""
echo -e "${BLUE}参数:${NC}"
echo " 项目名称 GitLab 项目名称"
echo " 环境类型 dev/prod (可选,默认为 dev)"
echo ""
echo -e "${BLUE}示例:${NC}"
echo " $0 stock-project dev"
echo " $0 stock-app prod"
}
# 检查参数
if [ $# -lt 1 ]; then
usage
exit 1
fi
PROJECT_NAME="$1"
ENV_TYPE="${2:-dev}"
echo -e "${YELLOW}项目名称: $PROJECT_NAME${NC}"
echo -e "${YELLOW}环境类型: $ENV_TYPE${NC}"
echo ""
# 检查 GitLab 是否运行
echo -e "${YELLOW}检查 GitLab 服务状态...${NC}"
if ! docker ps | grep gitlab-ce > /dev/null; then
echo -e "${RED}错误: GitLab 容器未运行${NC}"
echo "请先启动 GitLab: cd gitlab && docker-compose up -d"
exit 1
fi
# 等待 GitLab 完全启动
echo -e "${YELLOW}等待 GitLab 完全启动...${NC}"
until curl -f -s "$GITLAB_URL/-/health" > /dev/null; do
echo "GitLab 正在启动中..."
sleep 10
done
echo -e "${GREEN}GitLab 已启动并可用${NC}"
# 获取 GitLab API token
echo -e "${YELLOW}获取 GitLab API token...${NC}"
PRIVATE_TOKEN=$(curl -s -X POST "$GITLAB_URL/api/v4/session" \
-H "Content-Type: application/json" \
-d "{\"login\":\"$GITLAB_ADMIN_USER\",\"password\":\"$GITLAB_ADMIN_PASSWORD\"}" | \
jq -r '.private_token')
if [ "$PRIVATE_TOKEN" = "null" ] || [ -z "$PRIVATE_TOKEN" ]; then
echo -e "${RED}错误: 无法获取 API token${NC}"
echo "请检查 GitLab 管理员凭据"
exit 1
fi
# 查找项目
echo -e "${YELLOW}查找项目: $PROJECT_NAME${NC}"
PROJECT_INFO=$(curl -s "$GITLAB_URL/api/v4/projects?search=$PROJECT_NAME" \
-H "Private-Token: $PRIVATE_TOKEN" | \
jq ".[] | select(.path_with_namespace | contains(\"$PROJECT_NAME\"))")
if [ -z "$PROJECT_INFO" ]; then
echo -e "${RED}错误: 未找到项目 '$PROJECT_NAME'${NC}"
echo "请确保项目已存在于 GitLab 中"
exit 1
fi
PROJECT_ID=$(echo "$PROJECT_INFO" | jq -r '.id')
PROJECT_PATH=$(echo "$PROJECT_INFO" | jq -r '.path_with_namespace')
echo -e "${GREEN}找到项目: $PROJECT_PATH (ID: $PROJECT_ID)${NC}"
# 环境变量配置
echo -e "${YELLOW}配置 CI/CD 环境变量...${NC}"
# 基础环境变量
VARS=(
"NODE_VERSION|18|Node.js 版本"
"PYTHON_VERSION|3.11|Python 版本"
"CI_DEBUG_TRACE|false|启用调试日志"
)
# 部署相关环境变量
if [ "$ENV_TYPE" = "prod" ]; then
VARS+=(
"DEPLOY_ENV|production|部署环境"
"ENVIRONMENT_NAME|production|环境名称"
)
else
VARS+=(
"DEPLOY_ENV|development|部署环境"
"ENVIRONMENT_NAME|development|环境名称"
)
fi
# 数据库配置 (示例)
VARS+=(
"POSTGRES_DB|${PROJECT_NAME}_db|数据库名称"
"POSTGRES_USER|${PROJECT_NAME}_user|数据库用户"
"REDIS_URL|redis://redis:6379|Redis 连接"
)
# 为每个变量创建或更新
for var in "${VARS[@]}"; do
IFS='|' read -r key value description <<< "$var"
echo -e "${BLUE}设置变量: $key${NC}"
echo -e "${BLUE}描述: $description${NC}"
echo -e "${BLUE}值: $value${NC}"
# 检查变量是否已存在
existing_var=$(curl -s "$GITLAB_URL/api/v4/projects/$PROJECT_ID/variables/$key" \
-H "Private-Token: $PRIVATE_TOKEN" || echo "")
if [ -n "$existing_var" ]; then
# 更新现有变量
result=$(curl -s -X PUT "$GITLAB_URL/api/v4/projects/$PROJECT_ID/variables/$key" \
-H "Private-Token: $PRIVATE_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"value\":\"$value\",\"description\":\"$description\"}")
else
# 创建新变量
result=$(curl -s -X POST "$GITLAB_URL/api/v4/projects/$PROJECT_ID/variables" \
-H "Private-Token: $PRIVATE_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"key\":\"$key\",\"value\":\"$value\",\"description\":\"$description\"}")
fi
if [ $? -eq 0 ]; then
echo -e "${GREEN}✓ 变量设置成功${NC}"
else
echo -e "${RED}✗ 变量设置失败${NC}"
fi
echo ""
done
# 提示用户配置敏感变量
echo -e "${YELLOW}需要手动配置的敏感变量:${NC}"
echo "=================================="
echo "1. SSH_PRIVATE_KEY - 部署服务器 SSH 私钥"
echo "2. DEPLOY_SERVER - 部署服务器地址"
echo "3. DEPLOY_USER - 部署服务器用户名"
echo "4. DATABASE_PASSWORD - 数据库密码"
echo ""
echo -e "${BLUE}配置方法:${NC}"
echo "1. 访问 $GITLAB_URL"
echo "2. 进入项目: $PROJECT_PATH"
echo "3. Settings -> CI/CD -> Variables"
echo "4. 添加上述敏感变量,选择 'Protected' 和 'Masked'"
echo ""
# 创建示例 .gitlab-ci.yml 文件
echo -e "${YELLOW}创建示例 CI/CD 配置文件...${NC}"
cat > /tmp/.gitlab-ci.yml << 'EOF'
# 使用 stock 项目模板
include:
- local: 'gitlab/ci-templates/.gitlab-ci.yml.simple'
# 或者直接使用简化配置
stages:
- test
- build
- deploy
variables:
NODE_VERSION: "18"
IMAGE_TAG: "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA"
test:
stage: test
image: node:$NODE_VERSION-alpine
script:
- echo "运行测试..."
- npm install
- npm test
coverage: '/Total coverage: \d+\.\d+%/'
artifacts:
reports:
coverage_report:
coverage_format: cobertura
path: coverage/cobertura-coverage.xml
build:
stage: build
image: docker:latest
services:
- docker:dind
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker build -t $IMAGE_TAG .
- docker push $IMAGE_TAG
only:
- main
- develop
deploy:
stage: deploy
image: alpine:latest
script:
- echo "部署到 $DEPLOY_ENV 环境"
- echo "镜像: $IMAGE_TAG"
environment:
name: $ENVIRONMENT_NAME
when: manual
only:
- main
EOF
echo -e "${GREEN}示例配置文件已创建: /tmp/.gitlab-ci.yml${NC}"
echo ""
# 显示下一步操作
echo -e "${GREEN}环境变量配置完成!${NC}"
echo "=================================="
echo -e "${BLUE}下一步操作:${NC}"
echo "1. 复制示例配置文件到项目根目录:"
echo " cp /tmp/.gitlab-ci.yml /path/to/your/project/"
echo ""
echo "2. 推送代码到 GitLab:"
echo " git add .gitlab-ci.yml"
echo " git commit -m 'Add CI/CD configuration'"
echo " git push origin main"
echo ""
echo "3. 在 GitLab UI 中配置敏感变量"
echo "4. 等待流水线自动运行"
echo ""
echo -e "${BLUE}查看流水线:${NC}"
echo "$GITLAB_URL/$PROJECT_PATH/-/pipelines"