variables: # 网关/服务配置(保持不变) MES_BACK_CONTAINER: "mowen-blog-admin-api" MES_BACK_IMAGE: "mowen-blog-admin-api" MES_BACK_PORT: 8280 # Maven 本地仓库改用项目目录下的 .m2/repository,避免宿主机权限问题 MAVEN_OPTS: "-Djava.awt.headless=true -Dmaven.repo.local=${CI_PROJECT_DIR}/.m2/repository" # 全局缓存:缓存 Maven 本地仓库,加速后续构建 cache: key: "${CI_COMMIT_REF_SLUG}-maven" paths: - .m2/repository/ stages: - build - deploy # ==================== 构建阶段 ==================== build-dev:jdk17: stage: build image: moshangjunmowen/maven-jdk17:v3 script: - echo "=============== 开始编译打包任务(dev) ===============" - mvn clean package -DskipTests -P dev # 将 Dockerfile 和 jar 收集到 build 目录,供 artifacts 传递 - mkdir -p build - cp Dockerfile build/ - cp mowen-admin/target/mowen-admin-dev-1.0.0.jar build/ artifacts: paths: - build/ expire_in: 1 day # 产物保留时间,按需调整 only: - dev tags: - blog-dev build-test:jdk17: stage: build image: moshangjunmowen/maven-jdk17:v3 script: - echo "=============== 开始编译打包任务(test) ===============" - mvn clean package -Dmaven.test.skip=true -P test - mkdir -p build - cp Dockerfile build/ - cp mowen-admin/target/mowen-admin-test-1.0.0.jar build/ artifacts: paths: - build/ expire_in: 1 day only: - test tags: - mes-test build-prod:jdk17: stage: build image: moshangjunmowen/maven-jdk17:v3 script: - echo "=============== 开始编译打包任务(prod) ===============" - mvn clean package -Dmaven.test.skip=true -P prod - mkdir -p build - cp Dockerfile build/ - cp mowen-admin/target/mowen-admin-prod-1.0.0.jar build/ artifacts: paths: - build/ expire_in: 1 day only: - main tags: - pioneer-mes-prod # ==================== 部署阶段 ==================== deploy-dev:jdk17: stage: deploy image: docker:29.4.3 # 使用 docker 镜像执行部署命令 needs: ["build-dev:jdk17"] # 明确依赖构建产物,确保顺序 script: - echo "=============== 开始部署应用(dev) ===============" - cd build # 进入 artifacts 传递过来的目录 - docker ps -a | grep $MES_BACK_CONTAINER && docker stop $MES_BACK_CONTAINER && docker rm $MES_BACK_CONTAINER || echo "not exist" - docker images | grep $MES_BACK_IMAGE && docker rmi -f $MES_BACK_IMAGE || echo "not exist" # 构建上下文为当前目录(build/),直接使用 Dockerfile 和 jar - docker build --build-arg JAR_FILE=mowen-admin-dev-1.0.0.jar -t $MES_BACK_IMAGE . - docker run -d --restart=always -p $MES_BACK_PORT:1024 --network=host --log-opt max-size=50m --log-opt max-file=3 --name $MES_BACK_CONTAINER $MES_BACK_IMAGE only: - dev tags: - dev deploy-test:jdk17: stage: deploy image: docker:29.4.3 needs: ["build-test:jdk17"] script: - echo "=============== 开始部署应用(test) ===============" - cd build - docker ps -a | grep $MES_BACK_CONTAINER && docker stop $MES_BACK_CONTAINER && docker rm $MES_BACK_CONTAINER || echo "not exist" - docker images | grep $MES_BACK_IMAGE && docker rmi -f $MES_BACK_IMAGE || echo "not exist" - docker build --build-arg JAR_FILE=mowen-admin-test-1.0.0.jar -t $MES_BACK_IMAGE . - docker run -d --restart=always -p $MES_BACK_PORT:1024 --network=host --log-opt max-size=50m --log-opt max-file=3 --name $MES_BACK_CONTAINER $MES_BACK_IMAGE only: - test tags: - mes-test deploy-prod:jdk17: stage: deploy image: docker:29.4.3 needs: ["build-prod:jdk17"] script: - echo "=============== 开始部署应用(prod) ===============" - cd build - docker ps -a | grep $MES_BACK_CONTAINER && docker stop $MES_BACK_CONTAINER && docker rm $MES_BACK_CONTAINER || echo "not exist" - docker images | grep $MES_BACK_IMAGE && docker rmi -f $MES_BACK_IMAGE || echo "not exist" - docker build --build-arg JAR_FILE=mowen-admin-prod-1.0.0.jar -t $MES_BACK_IMAGE . - docker run -d --restart=always -p $MES_BACK_PORT:1024 --network=host --log-opt max-size=50m --log-opt max-file=5 --name $MES_BACK_CONTAINER $MES_BACK_IMAGE only: - main tags: - pioneer-mes-prod