From 817cbea10043e3d08827c97c8e7460ccfe775a05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E5=BF=97=E8=B1=AA?= Date: Fri, 15 May 2026 09:05:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitlab-ci.yml | 171 ++++++++++++++++++++++++++----------------------- 1 file changed, 91 insertions(+), 80 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 9aa0c78..a3a0a7d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,113 +1,124 @@ -variables: #变量 - #网关 - MES_BACK_CONTAINER: "mowen-blog-admin-api" - MES_BACK_IMAGE: "mowen-blog-admin-api" - MES_BACK_PORT: 8080 - MAVEN_OPTS: "-Djava.awt.headless=true -Dmaven.repo.local=/mydata/jun/back_project/.m2" #指定maven的存储目录 +variables: + # 网关/服务配置(保持不变) + MES_BACK_CONTAINER: "mowen-blog-admin-api" + MES_BACK_IMAGE: "mowen-blog-admin-api" + MES_BACK_PORT: 8080 + + # 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: - - /mydata/jun/back_project/.m2 + - .m2/repository/ stages: - build - deploy +# ==================== 构建阶段 ==================== build-dev:jdk17: stage: build + image: moshangjunmowen/maven-jdk17:v3 script: - - echo "=============== 开始编译打包任务 ===============" + - echo "=============== 开始编译打包任务(dev) ===============" - mvn clean package -DskipTests -P dev - #服务 - - mkdir -p /mydata/mowen-blog/back_project/app - - cp Dockerfile /mydata/mowen-blog/back_project/app - - cp mes-admin/target/mowen-admin-dev-1.0.0.jar /mydata/mowen-blog/back_project/app - + # 将 Dockerfile 和 jar 收集到 build 目录,供 artifacts 传递 + - mkdir -p build + - cp Dockerfile build/ + - cp mes-admin/target/mowen-admin-dev-1.0.0.jar build/ artifacts: paths: - build/ + expire_in: 1 day # 产物保留时间,按需调整 only: - - dev #当有代码合到主干时触发这个job + - dev tags: - blog-dev - image: moshangjunmowen/maven-jdk17:v3 build-test:jdk17: - stage: build - script: - - echo "=============== 开始编译打包任务 ===============" - - mvn clean package -Dmaven.test.skip=true -P test - #服务 - - mkdir -p /mydata/mowen-blog/back_project/app - - cp Dockerfile /mydata/mowen-blog/back_project/app - - cp mes-admin/target/mowen-admin-test-1.0.0.jar /mydata/mowen-blog/back_project/app - - artifacts: - paths: - - build/ - only: - - test #当有代码合到主干时触发这个job - tags: - - mes-test - image: moshangjunmowen/maven-jdk17:v3 + 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 mes-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 - script: - - echo "=============== 开始编译打包任务 ===============" - - mvn clean package -Dmaven.test.skip=true -P prod - #服务 - - mkdir -p /mydata/mowen-blog/back_project/app - - cp Dockerfile /mydata/mowen-blog/back_project/app - - cp mes-admin/target/mowen-admin-prod-1.0.0.jar /mydata/mowen-blog/back_project/app - - artifacts: - paths: - - build/ - only: - - main #当有代码合到主干时触发这个job - tags: - - pioneer-mes-prod - image: moshangjunmowen/maven-jdk17:v3 + 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 mes-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环境下的runner能执行docker命令 + image: docker:29.4.3 # 使用 docker 镜像执行部署命令 + needs: ["build-dev:jdk17"] # 明确依赖构建产物,确保顺序 script: - - echo "=============== 开始部署应用 ===============" - - 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-dev-1.0.0.jar -t $MES_BACK_IMAGE /mydata/mowen-blog/back_project/app + - 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 --network=host --log-opt max-size=50m --log-opt max-file=3 --name $MES_BACK_CONTAINER $MES_BACK_IMAGE only: - - dev #当有代码合到主干时触发这个job + - dev tags: - dev - deploy-test:jdk17: - stage: deploy - image: docker:29.4.3 #目的是为了在docker环境下的runner能执行docker命令 - script: - - echo "=============== 开始部署应用 ===============" - - 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 /mydata/mowen-blog/back_project/app - - docker run -d --restart=always --network=host --log-opt max-size=50m --log-opt max-file=3 --name $MES_BACK_CONTAINER $MES_BACK_IMAGE - only: - - test #当有代码合到主干时触发这个job - tags: - - mes-test + 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 --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 #目的是为了在docker环境下的runner能执行docker命令 - script: - #服务 - - 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 /mydata/mowen-blog/back_project/app - - docker run -d --restart=always --network=host --log-opt max-size=50m --log-opt max-file=5 --name $MES_BACK_CONTAINER $MES_BACK_IMAGE - only: - - main #当有代码合到主干时触发这个job - tags: - - pioneer-mes-prod + 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 --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 \ No newline at end of file