From 688356224194d6e25e2522169672d6db29ecb303 Mon Sep 17 00:00:00 2001 From: chenyuepan <3158614516@qq.com> Date: Mon, 23 Jun 2025 10:18:44 +0800 Subject: [PATCH] =?UTF-8?q?CI/CD=E9=9B=86=E6=88=90-update?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .drone.yml | 59 +++++++--------- Dockerfile | 37 ++++++---- docker.sh | 69 ++++++++++++++----- .../dto/QuestionQueryDTO.java | 12 ++-- .../service/impl/QuestionServiceImpl.java | 25 +------ start.sh | 7 -- 6 files changed, 107 insertions(+), 102 deletions(-) delete mode 100644 start.sh diff --git a/.drone.yml b/.drone.yml index 31c450d..71922e9 100644 --- a/.drone.yml +++ b/.drone.yml @@ -3,58 +3,47 @@ type: docker name: venue_reservation_service steps: - # 1.maven打包 - - name: maven compile + # 1. Maven打包阶段 + - name: build java package pull: if-not-exists - # 构建镜像的maven+jdk选择,最好选择满足匹配你的项目版本的 - image: matderosa/maven-3.8-openjdk-17-gcc8.5 + image: maven:3.8.7-openjdk-17-slim volumes: - # maven构建缓存 - name: maven-cache path: /root/.m2 - # 挂载宿主机的目录 - - name: maven-build - path: /venue/build + - name: build-output + path: /build-output commands: - # 开始打包maven工程 - mvn clean package -Dmaven.test.skip=true - # 将打包后的文件复制到宿主机映射目录 - - cp target/*.jar /venue/build - - cp Dockerfile /venue/build - - cp docker.sh /venue/build - - cp start.sh /venue/build + - cp target/*.jar /build-output/app.jar + - cp Dockerfile /build-output + - cp docker.sh /build-output + environment: + DRONE_REPO_NAME: venue_reservation_service # 确保这个变量设置正确 - - name: build docker - image: plugins/docker + # 2. Docker构建和部署阶段 + - name: build and deploy docker + image: docker:20.10-dind volumes: - # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置 - - name: maven-build - path: /venue/build # 将应用打包好的Jar和执行脚本挂载出来 - - name: docker - path: /var/run/docker.sock # 挂载宿主机的docker - settings: - dockerfile: /venue/build/Dockerfile + - name: build-output + path: /build-output + - name: docker-sock + path: /var/run/docker.sock commands: - # 定义在Docker容器中执行的shell命令 - - cd /venue/build + - cd /build-output - chmod +x docker.sh - - sh docker.sh - - docker ps + - ./docker.sh - -volumes: # 定义流水线挂载目录,用于共享数据 - - name: maven-build +volumes: + - name: build-output host: - path: /home/projects/venue/maven/build # 从宿主机中挂载的目录 + path: /home/projects/venue/build - name: maven-cache host: path: /home/projects/venue/maven/cache - - name: docker + - name: docker-sock host: path: /var/run/docker.sock - -# drone执行触发器 trigger: branch: - - master + - master \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 5da84e4..597108c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,16 +1,23 @@ -#指定了基础镜像为 khipu/openjdk17-alpine,即使用了 OpenJDK 17 的 Alpine 版本作为基础 +# 指定基础镜像 FROM khipu/openjdk17-alpine -#设置了一个名为 SERVIECE_PORT 的环境变量,并将其值设为 9090 -ENV SERVIECE_PORT = 9090 -# 容器里 新建目录 thirdPlatform -RUN mkdir -p /venue/ -# 工作区 -WORKDIR /venue -# 复制操作 -COPY ./start.sh /venue/ -#将宿主机当前目录下的 *.jar 文件复制到容器的 /third_platform_admin/ 目录下 -COPY ./*.jar /venue/ -#对 /thirdPlatform/ 目录及其子目录下的所有文件赋予可执行权限 -RUN chmod 755 -R /venue/ -#设置容器的入口点为 /third_platform_admin/start.sh,即在容器启动时执行该脚本 -ENTRYPOINT ["/venue/start.sh"] + +# 添加维护者信息 (改用 LABEL 替代废弃的 MAINTAINER) +LABEL maintainer="author:chenyuepan" + +# 复制 JAR 文件到容器 +COPY ./venue_reservation_service-0.0.1-SNAPSHOT.jar /opt/app.jar + +# 设置工作目录 +WORKDIR /opt + +# 暴露多个端口 (9020 和 9030) +EXPOSE 9020 9030 + +# 容器运行命令 (放在最后以确保运行时可用) +CMD ["java", "-jar", "app.jar"] + +# 在构建阶段打印 Java 版本 (优化分层结构) +RUN java -version + +# 添加镜像元数据 +LABEL version="1.0" description="这是一个Web服务器" by="edc" \ No newline at end of file diff --git a/docker.sh b/docker.sh index 31ed1c4..26a5811 100644 --- a/docker.sh +++ b/docker.sh @@ -1,22 +1,55 @@ #!/bin/sh -# 定义应用组名 +# 定义应用组名和名称 group_name='venue_reservation_service' -# 定义应用名称 ,这里的name是获取你仓库的名称,也可以自己写 app_name=${DRONE_REPO_NAME} -# 定义应用版本 app_version='latest' -echo '----copy jar----' -docker stop ${app_name} -echo '----stop container----' -docker rm ${app_name} -echo '----rm container----' -docker rmi ${group_name}/${app_name}:${app_version} -echo '----rm image----' -# 打包编译docker镜像 -docker build -t ${group_name}/${app_name}:${app_version} . -echo '----build image----' -docker run -p 9020:9020 --name ${app_name} \ --e TZ="Asia/Shanghai" \ --v /etc/localtime:/etc/localtime \ --d ${group_name}/${app_name}:${app_version} -echo '----start container----' + +# 验证必要变量 +if [ -z "$app_name" ]; then + echo "ERROR: DRONE_REPO_NAME not set!" + exit 1 +fi + +# 1. 安全停止容器 +if docker ps | grep -q ${app_name}; then + echo "----Stopping container: ${app_name}----" + docker stop ${app_name} || echo "警告: 容器停止失败,但继续执行" +elif docker ps -a | grep -q ${app_name}; then + echo "容器 ${app_name} 已停止,跳过停止命令" +else + echo "容器 ${app_name} 不存在,无需停止" +fi + +# 2. 安全删除容器 +if docker ps -a | grep -q ${app_name}; then + echo "----Removing container: ${app_name}----" + docker rm ${app_name} || echo "警告: 容器删除失败,但继续执行" +else + echo "容器 ${app_name} 不存在,无需删除" +fi + +# 3. 安全删除镜像 +image_name="${group_name}/${app_name}:${app_version}" +if docker images | grep -q "${group_name}/${app_name}.*${app_version}"; then + echo "----Removing image: ${image_name}----" + docker rmi ${image_name} || echo "警告: 镜像删除失败,但继续执行" +else + echo "镜像 ${image_name} 不存在,无需删除" +fi + +# 4. 构建新镜像 +echo "----Building image: ${image_name}----" +docker build -t ${image_name} . + +# 5. 带双端口映射运行容器 +echo "----Starting container with port mapping (9020 & 9030)----" +docker run \ + --name ${app_name} \ + -p 9020:9020 \ + -p 9030:9030 \ + -e TZ="Asia/Shanghai" \ + -v /etc/localtime:/etc/localtime \ + -d ${image_name} + +echo "----部署完成! 容器 ${app_name} 已启动----" +echo "已映射端口: 9020 (应用端口) 和 9030 (管理端口)" \ No newline at end of file diff --git a/src/main/java/com/example/venue_reservation_service/dto/QuestionQueryDTO.java b/src/main/java/com/example/venue_reservation_service/dto/QuestionQueryDTO.java index 989461e..22205d2 100644 --- a/src/main/java/com/example/venue_reservation_service/dto/QuestionQueryDTO.java +++ b/src/main/java/com/example/venue_reservation_service/dto/QuestionQueryDTO.java @@ -5,14 +5,18 @@ import lombok.Data; import lombok.EqualsAndHashCode; @Data -@Schema(description = "用户") +@Schema(description = "用户查询自己的提问") public class QuestionQueryDTO extends PageDTO{ - //场馆 + // 场馆 + @Schema(description = "场馆") private String type; - //状态 + // 状态 + @Schema(description = "状态(1:待处理;2:已处理)") private Integer status; - + // 用户编号 + @Schema(description = "用户编号") + private Integer userId; } diff --git a/src/main/java/com/example/venue_reservation_service/service/impl/QuestionServiceImpl.java b/src/main/java/com/example/venue_reservation_service/service/impl/QuestionServiceImpl.java index d1ec61c..3057e0f 100644 --- a/src/main/java/com/example/venue_reservation_service/service/impl/QuestionServiceImpl.java +++ b/src/main/java/com/example/venue_reservation_service/service/impl/QuestionServiceImpl.java @@ -55,29 +55,8 @@ public class QuestionServiceImpl extends ServiceImpl @Override public Result userPage(QuestionQueryDTO dto) { - Page page = Page.of(dto.getCurrent(), dto.getSize()); - - page.addOrder(OrderItem.desc("created_time")); - - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - - if (dto.getStatus() != null) { - wrapper.eq(Question::getStatus, dto.getStatus()); - } - - if (dto.getType() != null) { - wrapper.eq(Question::getType, dto.getType()); - } - - Page resultPage = page(page, wrapper); - - - QueryVO vo = new QueryVO<>(); - vo.setList(resultPage.getRecords()); - vo.setTotal(resultPage.getTotal()); - - return Result.ok(vo).message("查询成功"); - + Page page = new Page<>(dto.getCurrent(), dto.getSize()); + return Result.ok().message("查询成功"); } @Override diff --git a/start.sh b/start.sh deleted file mode 100644 index da6ace5..0000000 --- a/start.sh +++ /dev/null @@ -1,7 +0,0 @@ -java -Xms128m -Xmx128m -jar /thirdPlatform/*.jar --spring.profiles.active=dev - -if [ $? != 0 ]; then - echo Failed to start java >&2 - exit 1 -fi -