diff --git a/.gitea/workflows/dev.yml b/.gitea/workflows/dev.yml index 05b91aa3..889a5863 100644 --- a/.gitea/workflows/dev.yml +++ b/.gitea/workflows/dev.yml @@ -1,43 +1,47 @@ -run-name: ${{ gitea.actor }} is building with parent POM first 🚀 +run-name: ${{ gitea.actor }} 构建主POM并分模块打包 🚀 on: push: branches: - master jobs: + # 第一步:构建主POM(父模块)并安装到本地仓库 build-parent-pom: runs-on: ubuntu steps: - - name: Checkout Repository + - name: 拉取代码仓库 uses: http://git.missmoc.top/mocheng/checkout@v4 - - name: Set up environment (JDK + Maven) + - name: 配置环境变量(使用绝对路径) run: | - # 配置 JDK(确认路径正确,与实际安装一致) - echo "JAVA_HOME=/java17/java17" >> $GITHUB_ENV - echo "$JAVA_HOME/bin" >> $GITHUB_PATH + # 配置JDK绝对路径(必须与runner中实际路径一致) + export JAVA_HOME="/java17/java17" + # 配置Maven绝对路径(必须与runner中实际路径一致) + export MAVEN_HOME="/maven/apache-maven-3.9.11" - # 修复 Maven 路径:先确认 runner 中 Maven 的实际安装位置 - # 常见路径:/usr/local/maven、/opt/maven、/maven 等,根据实际情况修改 - MAVEN_ACTUAL_PATH="/maven/apache-maven-3.9.11" # 关键:替换为 runner 中 Maven 的真实路径 - - # 验证 Maven 可执行文件是否存在 - if [ ! -f "$MAVEN_ACTUAL_PATH/bin/mvn" ]; then - echo "Error: Maven 可执行文件不存在于 $MAVEN_ACTUAL_PATH/bin/mvn" + # 验证JDK和Maven可执行文件是否存在 + if [ ! -f "$JAVA_HOME/bin/java" ]; then + echo "错误:JDK可执行文件不存在于 $JAVA_HOME/bin/java" + exit 1 + fi + if [ ! -f "$MAVEN_HOME/bin/mvn" ]; then + echo "错误:Maven可执行文件不存在于 $MAVEN_HOME/bin/mvn" exit 1 fi - # 配置 Maven 环境变量 - echo "MAVEN_HOME=$MAVEN_ACTUAL_PATH" >> $GITHUB_ENV - echo "$MAVEN_ACTUAL_PATH/bin" >> $GITHUB_PATH + # 写入环境变量(确保后续步骤可用) + echo "JAVA_HOME=$JAVA_HOME" >> $GITHUB_ENV + echo "$JAVA_HOME/bin" >> $GITHUB_PATH + echo "MAVEN_HOME=$MAVEN_HOME" >> $GITHUB_ENV + echo "$MAVEN_HOME/bin" >> $GITHUB_PATH - # 验证配置 - echo "Java 版本:" - java -version - echo "Maven 版本:" - mvn -v # 此处若仍报错,说明路径确实错误,需重新确认 + # 验证环境配置 + echo "=== JDK版本 ===" + "$JAVA_HOME/bin/java" -version + echo "=== Maven版本 ===" + "$MAVEN_HOME/bin/mvn" -v - - name: Configure Maven settings + - name: 配置Maven仓库(本地优先) run: | mkdir -p ~/.m2 cat > ~/.m2/settings.xml << EOF @@ -51,6 +55,8 @@ jobs: local-repo file://${user.home}/.m2/repository + true + true dromara-releases @@ -65,47 +71,72 @@ jobs: EOF - - name: Build and install parent POM + - name: 构建并安装主POM(父模块) run: | - MAIN_POM_PATH="./pom.xml" - if [ ! -f "$MAIN_POM_PATH" ]; then - echo "Error: 主POM文件不存在" + # 主POM绝对路径 + MAIN_POM_ABSOLUTE_PATH="${GITHUB_WORKSPACE}/pom.xml" + echo "主POM路径:$MAIN_POM_ABSOLUTE_PATH" + + if [ ! -f "$MAIN_POM_ABSOLUTE_PATH" ]; then + echo "错误:主POM文件不存在于 $MAIN_POM_ABSOLUTE_PATH" exit 1 fi - mvn clean install -N -U -DskipTests -f $MAIN_POM_PATH + + # 使用绝对路径执行Maven命令,仅构建父模块(-N) + "$MAVEN_HOME/bin/mvn" clean install -N -U -DskipTests -f "$MAIN_POM_ABSOLUTE_PATH" + + # 验证主POM是否安装成功 + echo "=== 验证主POM安装 ===" + ls -la ~/.m2/repository/org/dromara/ruoyi-cloud-plus/ + # 第二步:构建通用模块(依赖主POM) build-common-modules: needs: build-parent-pom runs-on: ubuntu steps: - - name: Checkout Repository + - name: 拉取代码仓库 uses: http://git.missmoc.top/mocheng/checkout@v4 - - name: Set up environment + - name: 配置环境变量(绝对路径) run: | - echo "JAVA_HOME=/java17/java17" >> $GITHUB_ENV + export JAVA_HOME="/java17/java17" + export MAVEN_HOME="/maven/apache-maven-3.9.11" + echo "JAVA_HOME=$JAVA_HOME" >> $GITHUB_ENV echo "$JAVA_HOME/bin" >> $GITHUB_PATH - MAVEN_ACTUAL_PATH="/maven/apache-maven-3.9.11" # 与上文一致 - echo "MAVEN_HOME=$MAVEN_ACTUAL_PATH" >> $GITHUB_ENV - echo "$MAVEN_ACTUAL_PATH/bin" >> $GITHUB_PATH - mvn -v # 验证 + echo "MAVEN_HOME=$MAVEN_HOME" >> $GITHUB_ENV + echo "$MAVEN_HOME/bin" >> $GITHUB_PATH - - name: Build and install common modules + - name: 构建并安装通用模块 run: | + # 通用模块列表(根据实际项目结构调整) COMMON_MODULES=( "ruoyi-common" "ruoyi-api" "ruoyi-common-bom" + "ruoyi-common-alibaba-bom" + "ruoyi-api-bom" ) + for module in "${COMMON_MODULES[@]}"; do - POM_PATH="./$module/pom.xml" - if [ -f "$POM_PATH" ]; then - mvn clean install -U -DskipTests -f $POM_PATH - else - echo "Warning: 模块 $module 不存在" + # 模块POM的绝对路径 + MODULE_POM_ABSOLUTE_PATH="${GITHUB_WORKSPACE}/${module}/pom.xml" + echo "=== 构建模块:$module ===" + echo "POM路径:$MODULE_POM_ABSOLUTE_PATH" + + if [ ! -f "$MODULE_POM_ABSOLUTE_PATH" ]; then + echo "警告:模块 $module 的POM文件不存在,跳过" + continue fi + + # 使用Maven绝对路径执行命令 + "$MAVEN_HOME/bin/mvn" clean install -U -DskipTests -f "$MODULE_POM_ABSOLUTE_PATH" + + # 验证模块是否安装成功 + MODULE_GROUP_ID="org.dromara" + ls -la ~/.m2/repository/"${MODULE_GROUP_ID//.//}"/"$module"/ done + # 第三步:分服务构建镜像并上传(依赖通用模块) build-and-push-services: needs: build-common-modules runs-on: ubuntu @@ -127,55 +158,69 @@ jobs: - ruoyi-sentinel-dashboard - ruoyi-snailjob-server steps: - - name: Checkout Repository + - name: 拉取代码仓库 uses: http://git.missmoc.top/mocheng/checkout@v4 - - name: Set up environment + - name: 配置环境变量(绝对路径) run: | - echo "JAVA_HOME=/java17/java17" >> $GITHUB_ENV + export JAVA_HOME="/java17/java17" + export MAVEN_HOME="/maven/apache-maven-3.9.11" + echo "JAVA_HOME=$JAVA_HOME" >> $GITHUB_ENV echo "$JAVA_HOME/bin" >> $GITHUB_PATH - MAVEN_ACTUAL_PATH="/maven/apache-maven-3.9.11" # 与上文一致 - echo "MAVEN_HOME=$MAVEN_ACTUAL_PATH" >> $GITHUB_ENV - echo "$MAVEN_ACTUAL_PATH/bin" >> $GITHUB_PATH - mvn -v # 验证 + echo "MAVEN_HOME=$MAVEN_HOME" >> $GITHUB_ENV + echo "$MAVEN_HOME/bin" >> $GITHUB_PATH - - name: Build service with Maven + - name: 构建服务模块 run: | - SERVICE_PATH="${{ matrix.service }}" - POM_PATH="./$SERVICE_PATH/pom.xml" - if [ ! -f "$POM_PATH" ]; then - echo "Error: POM文件不存在" + SERVICE_NAME="${{ matrix.service }}" + # 服务POM的绝对路径 + SERVICE_POM_ABSOLUTE_PATH="${GITHUB_WORKSPACE}/${SERVICE_NAME}/pom.xml" + echo "=== 构建服务:$SERVICE_NAME ===" + echo "POM路径:$SERVICE_POM_ABSOLUTE_PATH" + + if [ ! -f "$SERVICE_POM_ABSOLUTE_PATH" ]; then + echo "错误:服务 $SERVICE_NAME 的POM文件不存在" exit 1 fi - mvn clean package -U -DskipTests -f $POM_PATH + + # 使用Maven绝对路径执行打包命令 + "$MAVEN_HOME/bin/mvn" clean package -U -DskipTests -f "$SERVICE_POM_ABSOLUTE_PATH" + + # 验证构建产物 + echo "=== 构建产物 ===" + ls -la "${GITHUB_WORKSPACE}/${SERVICE_NAME}/target/" - - name: Set Up Docker Buildx + - name: 配置Docker Buildx uses: http://git.missmoc.top/mocheng/setup-buildx-action@v3 - - name: Login to Registry + - name: 登录到容器仓库 uses: http://git.missmoc.top/mocheng/login-action@v3 with: registry: ${{ secrets.REGISTRY_URL }} username: ${{ secrets.REGISTRY_USER }} password: ${{ secrets.REGISTRY_PASS }} - - name: Determine Dockerfile Path + - name: 确定Dockerfile路径 id: dockerfile-path run: | - SERVICE_PATH="${{ matrix.service }}" - DOCKERFILE="$SERVICE_PATH/Dockerfile" - if [ -f "$DOCKERFILE" ]; then - echo "dockerfile_path=$DOCKERFILE" >> $GITHUB_OUTPUT + SERVICE_NAME="${{ matrix.service }}" + DOCKERFILE_ABSOLUTE_PATH="${GITHUB_WORKSPACE}/${SERVICE_NAME}/Dockerfile" + + if [ -f "$DOCKERFILE_ABSOLUTE_PATH" ]; then + echo "dockerfile_path=$DOCKERFILE_ABSOLUTE_PATH" >> $GITHUB_OUTPUT + echo "使用Dockerfile:$DOCKERFILE_ABSOLUTE_PATH" else - echo "dockerfile_path=./Dockerfile" >> $GITHUB_OUTPUT + echo "dockerfile_path=${GITHUB_WORKSPACE}/Dockerfile" >> $GITHUB_OUTPUT + echo "使用根目录Dockerfile:${GITHUB_WORKSPACE}/Dockerfile" fi - - name: Build and Push Docker Image + - name: 构建并推送Docker镜像 uses: http://git.missmoc.top/mocheng/build-push-action@v5 with: - context: . + context: "${GITHUB_WORKSPACE}" file: ${{ steps.dockerfile-path.outputs.dockerfile_path }} tags: ${{ secrets.REGISTRY_URL }}/by2025/${{ matrix.service }}:${{ github.sha }} push: true cache-from: type=gha - cache-to: type=gha,mode=max \ No newline at end of file + cache-to: type=gha,mode=max + \ No newline at end of file