#!/bin/bash BRANCH_NAME="dev" # 修改项目名称 PROJECT_NAME="video-flow-$BRANCH_NAME-frontend" # 设置日志文件路径 LOGFILE="build_and_copy.log" # 记录开始时间 echo "Build process started at $(date)" | tee $LOGFILE # 获取当前分支名 current_branch=$(git rev-parse --abbrev-ref HEAD) # 指定并加载环境变量文件(dev 使用 .env.development) ENV_FILE=".env.development" # 兼容 KEY=VALUE 与 KEY: VALUE 的 .env 行为,忽略注释与空行 load_env_file() { local file="$1" if [ -f "$file" ]; then echo "Loading environment from $file" | tee -a $LOGFILE while IFS= read -r raw || [ -n "$raw" ]; do # 去除注释与首尾空白 local line="${raw%%#*}" line="$(echo "$line" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')" [ -z "$line" ] && continue # 将 KEY: VALUE 转换为 KEY=VALUE if echo "$line" | grep -q '^[A-Za-z_][A-Za-z0-9_]*[[:space:]]*:'; then line="$(echo "$line" | sed -E 's/^([A-Za-z_][A-Za-z0-9_]*)[[:space:]]*:[[:space:]]*/\1=/')" fi # 仅处理合法的 KEY=VALUE 形式 if echo "$line" | grep -q '^[A-Za-z_][A-Za-z0-9_]*='; then # 去除等号两侧空白 line="$(echo "$line" | sed -E 's/^[[:space:]]*//; s/[[:space:]]*$//; s/[[:space:]]*=[[:space:]]*/=/')" export $line fi done < "$file" else echo "未找到 $file,继续使用当前环境变量" | tee -a $LOGFILE fi } load_env_file "$ENV_FILE" # 设置 NODE_ENV 为 development,避免默认使用 production export NODE_ENV="development" # 打包之前,需要检查是否在 dev 分支,工作区是否干净,是否和远程分支一致 if [ "$(git branch --show-current)" != "$BRANCH_NAME" ]; then echo "当前分支不是 dev 分支" exit 1 fi # 检查工作区是否干净 if [ -n "$(git status --porcelain)" ]; then echo "工作区不干净" exit 1 fi # 检查远程分支是否和本地分支一致 if [ "$(git rev-parse HEAD)" != "$(git rev-parse origin/$BRANCH_NAME)" ]; then echo "本地分支和远程分支不一致" exit 1 fi # 检查当前分支并运行相应的 npm 命令 if [ "$current_branch" = "$BRANCH_NAME" ]; then echo "On dev branch, building project..." | tee -a $LOGFILE PROFILE_ENV=$BRANCH_NAME # 安装依赖并构建 yarn install yarn build # 准备dist目录 mkdir -p dist cp -r .next dist/ cp -r public dist/ cp package.json dist/ cp package-lock.json dist/ else echo "On non-dev branch ($current_branch), exiting" exit 1 fi # 创建tar包 tar -czvf $PROJECT_NAME-$PROFILE_ENV.tar.gz dist # 记录结束时间 echo "Build process completed at $(date)" | tee -a $LOGFILE # 上传到 nexus echo "upload to nexus at $(date)" | tee -a $LOGFILE curl -u 'admin':'YZ9Gq6=8\*G|?:,' --upload-file $PROJECT_NAME-$PROFILE_ENV.tar.gz https://repo.qikongjian.com/repository/frontend-tar-files/ # 清理构建文件 rm -rf dist rm $PROJECT_NAME-$PROFILE_ENV.tar.gz