- 新增 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 <[email protected]>
252 lines
6.8 KiB
Bash
Executable File
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" |