diff --git a/.gitea/workflows/dev.yml b/.gitea/workflows/dev.yml index 23deaf32..9de1eb6e 100644 --- a/.gitea/workflows/dev.yml +++ b/.gitea/workflows/dev.yml @@ -1,134 +1,72 @@ -run-name: ${{ gitea.actor }} 构建镜像并推送(不含JAR依赖上传)🚀 +run-name: ${{ gitea.actor }} 构建并推送服务镜像 🚀 on: push: - branches: - - master + branches: [master] jobs: - build-parent-pom: + # 阶段1:通过主POM统一构建所有模块 + build-all: runs-on: ubuntu steps: - - name: 拉取代码仓库 + - name: 拉取代码 uses: http://git.missmoc.top/mocheng/checkout@v4 - - name: 配置环境变量(绝对路径) + - name: 配置JDK和Maven run: | + # 配置环境变量 export JAVA_HOME="/java17/java17" export MAVEN_HOME="/maven/apache-maven-3.9.11" - 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 + # 验证环境 + [ -d "$JAVA_HOME" ] || { echo "JDK不存在: $JAVA_HOME"; exit 1; } + [ -d "$MAVEN_HOME" ] || { echo "Maven不存在: $MAVEN_HOME"; exit 1; } + # 导出环境变量 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 - - "$JAVA_HOME/bin/java" -version - "$MAVEN_HOME/bin/mvn" -v - name: 配置Maven仓库 run: | mkdir -p ~/.m2 - cat > ~/.m2/settings.xml << EOF + cat > ~/.m2/settings.xml << 'EOF' - $HOME/.m2/repository + ${user.home}/.m2/repository - multi-repo + aliyun - local-repo - file://$HOME/.m2/repository - - - aliyun-public + aliyun https://maven.aliyun.com/repository/public + true + true - multi-repo + aliyun EOF - - name: 构建主POM(仅本地安装,不上传) + - name: 主POM统一打包 run: | - MAIN_POM_ABSOLUTE_PATH="${GITHUB_WORKSPACE}/pom.xml" - if [ ! -f "$MAIN_POM_ABSOLUTE_PATH" ]; then - echo "错误:主POM文件不存在" - exit 1 - fi + # 从根目录构建所有模块 + mvn clean package -U -DskipTests -f pom.xml - retries=3 - count=0 - until "$MAVEN_HOME/bin/mvn" clean package -U -DskipTests -f "$MAIN_POM_ABSOLUTE_PATH"; do - count=$((count + 1)) - if [ $count -ge $retries ]; then - echo "错误:主POM构建失败" - exit 1 - fi - sleep 10 - done + # 查看构建产物 + find . -name "*.jar" -path "*/target/*" - 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 - MODULE_POM_ABSOLUTE_PATH="${GITHUB_WORKSPACE}/${module}/pom.xml" - if [ ! -f "$MODULE_POM_ABSOLUTE_PATH" ]; then - echo "警告:模块 $module 不存在,跳过" - continue - fi - - retries=3 - count=0 - until "$MAVEN_HOME/bin/mvn" clean install -U -DskipTests -f "$MODULE_POM_ABSOLUTE_PATH"; do - count=$((count + 1)) - if [ $count -ge $retries ]; then - echo "错误:模块 $module 构建失败" - exit 1 - fi - sleep 10 - done - done - - build-and-push-services: - needs: build-common-modules + # 阶段2:为每个服务构建并推送镜像 + build-images: + needs: build-all runs-on: ubuntu strategy: + fail-fast: false matrix: service: - ruoyi-auth @@ -146,58 +84,32 @@ jobs: - ruoyi-sentinel-dashboard - ruoyi-snailjob-server steps: - - name: 拉取代码仓库 + - 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: 构建服务模块(仅用于镜像构建,不上传JAR) - run: | - SERVICE_NAME="${{ matrix.service }}" - SERVICE_POM_ABSOLUTE_PATH="${GITHUB_WORKSPACE}/${SERVICE_NAME}/pom.xml" - if [ ! -f "$SERVICE_POM_ABSOLUTE_PATH" ]; then - echo "错误:服务 $SERVICE_NAME 的POM文件不存在" - exit 1 - fi - - "$MAVEN_HOME/bin/mvn" clean package -U -DskipTests -f "$SERVICE_POM_ABSOLUTE_PATH" - - - name: 配置Docker Buildx + - name: 配置Docker构建环境 uses: http://git.missmoc.top/mocheng/setup-buildx-action@v3 - - name: 登录到容器仓库 + - 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 - else - echo "dockerfile_path=${GITHUB_WORKSPACE}/Dockerfile" >> $GITHUB_OUTPUT - fi - - - name: 构建并推送Docker镜像(仅推送镜像,不上传JAR) + - name: 构建并推送镜像 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 }} + context: . + file: ./${{ matrix.service }}/Dockerfile + tags: | + ${{ secrets.REGISTRY_URL }}/by2025/${{ matrix.service }}:${{ github.sha }} + ${{ secrets.REGISTRY_URL }}/by2025/${{ matrix.service }}:latest push: true cache-from: type=gha cache-to: type=gha,mode=max + # 仅当Dockerfile或相关目录变化时构建 + paths: + - ${{ matrix.service }}/** + - pom.xml \ No newline at end of file