run-name: ${{ gitea.actor }} 构建主POM并分模块打包 🚀 on: push: branches: - master jobs: # 第一步:构建主POM(父模块)并安装到本地仓库 build-parent-pom: runs-on: ubuntu steps: - name: 拉取代码仓库 uses: http://git.missmoc.top/mocheng/checkout@v4 - name: 配置环境变量(使用绝对路径) run: | # 配置JDK绝对路径(必须与runner中实际路径一致) export JAVA_HOME="/java17/java17" # 配置Maven绝对路径(必须与runner中实际路径一致) export MAVEN_HOME="/maven/apache-maven-3.9.11" # 验证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 # 写入环境变量(确保后续步骤可用) 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 "=== JDK版本 ===" "$JAVA_HOME/bin/java" -version echo "=== Maven版本 ===" "$MAVEN_HOME/bin/mvn" -v - name: 配置Maven仓库(本地优先) run: | mkdir -p ~/.m2 cat > ~/.m2/settings.xml << EOF ${user.home}/.m2/repository local-first local-repo file://${user.home}/.m2/repository true true dromara-releases https://maven.dromara.org/repository/releases/ local-first EOF - name: 构建并安装主POM(父模块) run: | # 主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 # 使用绝对路径执行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: 拉取代码仓库 uses: http://git.missmoc.top/mocheng/checkout@v4 - name: 配置环境变量(绝对路径) run: | 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 echo "MAVEN_HOME=$MAVEN_HOME" >> $GITHUB_ENV echo "$MAVEN_HOME/bin" >> $GITHUB_PATH - 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的绝对路径 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 strategy: matrix: service: - ruoyi-auth - ruoyi-gateway - ruoyi-modules/Property - ruoyi-modules/ruoyi-gen - ruoyi-modules/ruoyi-job - ruoyi-modules/ruoyi-resource - ruoyi-modules/ruoyi-system - ruoyi-modules/ruoyi-workflow - ruoyi-modules/Sis - ruoyi-visual/ruoyi-monitor - ruoyi-visual/ruoyi-nacos - ruoyi-seata-server - ruoyi-sentinel-dashboard - ruoyi-snailjob-server steps: - name: 拉取代码仓库 uses: http://git.missmoc.top/mocheng/checkout@v4 - name: 配置环境变量(绝对路径) run: | 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 echo "MAVEN_HOME=$MAVEN_HOME" >> $GITHUB_ENV echo "$MAVEN_HOME/bin" >> $GITHUB_PATH - name: 构建服务模块 run: | 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 # 使用Maven绝对路径执行打包命令 "$MAVEN_HOME/bin/mvn" clean package -U -DskipTests -f "$SERVICE_POM_ABSOLUTE_PATH" # 验证构建产物 echo "=== 构建产物 ===" ls -la "${GITHUB_WORKSPACE}/${SERVICE_NAME}/target/" - name: 配置Docker Buildx uses: http://git.missmoc.top/mocheng/setup-buildx-action@v3 - name: 登录到容器仓库 uses: http://git.missmoc.top/mocheng/login-action@v3 with: registry: ${{ secrets.REGISTRY_URL }} username: ${{ secrets.REGISTRY_USER }} password: ${{ secrets.REGISTRY_PASS }} - name: 确定Dockerfile路径 id: dockerfile-path run: | 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=${GITHUB_WORKSPACE}/Dockerfile" >> $GITHUB_OUTPUT echo "使用根目录Dockerfile:${GITHUB_WORKSPACE}/Dockerfile" fi - name: 构建并推送Docker镜像 uses: http://git.missmoc.top/mocheng/build-push-action@v5 with: 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