CI/CD集成-update

master
chenyuepan 3 weeks ago
parent e45f1877ba
commit 6883562241

@ -3,58 +3,47 @@ type: docker
name: venue_reservation_service name: venue_reservation_service
steps: steps:
# 1.maven打包 # 1. Maven打包阶段
- name: maven compile - name: build java package
pull: if-not-exists pull: if-not-exists
# 构建镜像的maven+jdk选择最好选择满足匹配你的项目版本的 image: maven:3.8.7-openjdk-17-slim
image: matderosa/maven-3.8-openjdk-17-gcc8.5
volumes: volumes:
# maven构建缓存
- name: maven-cache - name: maven-cache
path: /root/.m2 path: /root/.m2
# 挂载宿主机的目录 - name: build-output
- name: maven-build path: /build-output
path: /venue/build
commands: commands:
# 开始打包maven工程
- mvn clean package -Dmaven.test.skip=true - mvn clean package -Dmaven.test.skip=true
# 将打包后的文件复制到宿主机映射目录 - cp target/*.jar /build-output/app.jar
- cp target/*.jar /venue/build - cp Dockerfile /build-output
- cp Dockerfile /venue/build - cp docker.sh /build-output
- cp docker.sh /venue/build environment:
- cp start.sh /venue/build DRONE_REPO_NAME: venue_reservation_service # 确保这个变量设置正确
- name: build docker # 2. Docker构建和部署阶段
image: plugins/docker - name: build and deploy docker
image: docker:20.10-dind
volumes: volumes:
# 将容器内目录挂载到宿主机仓库需要开启Trusted设置 - name: build-output
- name: maven-build path: /build-output
path: /venue/build # 将应用打包好的Jar和执行脚本挂载出来 - name: docker-sock
- name: docker path: /var/run/docker.sock
path: /var/run/docker.sock # 挂载宿主机的docker
settings:
dockerfile: /venue/build/Dockerfile
commands: commands:
# 定义在Docker容器中执行的shell命令 - cd /build-output
- cd /venue/build
- chmod +x docker.sh - chmod +x docker.sh
- sh docker.sh - ./docker.sh
- docker ps
volumes: # 定义流水线挂载目录,用于共享数据 volumes:
- name: maven-build - name: build-output
host: host:
path: /home/projects/venue/maven/build # 从宿主机中挂载的目录 path: /home/projects/venue/build
- name: maven-cache - name: maven-cache
host: host:
path: /home/projects/venue/maven/cache path: /home/projects/venue/maven/cache
- name: docker - name: docker-sock
host: host:
path: /var/run/docker.sock path: /var/run/docker.sock
# drone执行触发器
trigger: trigger:
branch: branch:
- master - master

@ -1,16 +1,23 @@
#指定基础镜像为 khipu/openjdk17-alpine即使用了 OpenJDK 17 的 Alpine 版本作为基础 # 指定基础镜像
FROM khipu/openjdk17-alpine FROM khipu/openjdk17-alpine
#设置了一个名为 SERVIECE_PORT 的环境变量,并将其值设为 9090
ENV SERVIECE_PORT = 9090 # 添加维护者信息 (改用 LABEL 替代废弃的 MAINTAINER)
# 容器里 新建目录 thirdPlatform LABEL maintainer="author:chenyuepan"
RUN mkdir -p /venue/
# 工作区 # 复制 JAR 文件到容器
WORKDIR /venue COPY ./venue_reservation_service-0.0.1-SNAPSHOT.jar /opt/app.jar
# 复制操作
COPY ./start.sh /venue/ # 设置工作目录
#将宿主机当前目录下的 *.jar 文件复制到容器的 /third_platform_admin/ 目录下 WORKDIR /opt
COPY ./*.jar /venue/
#对 /thirdPlatform/ 目录及其子目录下的所有文件赋予可执行权限 # 暴露多个端口 (9020 和 9030)
RUN chmod 755 -R /venue/ EXPOSE 9020 9030
#设置容器的入口点为 /third_platform_admin/start.sh即在容器启动时执行该脚本
ENTRYPOINT ["/venue/start.sh"] # 容器运行命令 (放在最后以确保运行时可用)
CMD ["java", "-jar", "app.jar"]
# 在构建阶段打印 Java 版本 (优化分层结构)
RUN java -version
# 添加镜像元数据
LABEL version="1.0" description="这是一个Web服务器" by="edc"

@ -1,22 +1,55 @@
#!/bin/sh #!/bin/sh
# 定义应用组名 # 定义应用组名和名称
group_name='venue_reservation_service' group_name='venue_reservation_service'
# 定义应用名称 ,这里的name是获取你仓库的名称也可以自己写
app_name=${DRONE_REPO_NAME} app_name=${DRONE_REPO_NAME}
# 定义应用版本
app_version='latest' app_version='latest'
echo '----copy jar----'
docker stop ${app_name} # 验证必要变量
echo '----stop container----' if [ -z "$app_name" ]; then
docker rm ${app_name} echo "ERROR: DRONE_REPO_NAME not set!"
echo '----rm container----' exit 1
docker rmi ${group_name}/${app_name}:${app_version} fi
echo '----rm image----'
# 打包编译docker镜像 # 1. 安全停止容器
docker build -t ${group_name}/${app_name}:${app_version} . if docker ps | grep -q ${app_name}; then
echo '----build image----' echo "----Stopping container: ${app_name}----"
docker run -p 9020:9020 --name ${app_name} \ docker stop ${app_name} || echo "警告: 容器停止失败,但继续执行"
-e TZ="Asia/Shanghai" \ elif docker ps -a | grep -q ${app_name}; then
-v /etc/localtime:/etc/localtime \ echo "容器 ${app_name} 已停止,跳过停止命令"
-d ${group_name}/${app_name}:${app_version} else
echo '----start container----' 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 (管理端口)"

@ -5,14 +5,18 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
@Data @Data
@Schema(description = "用户") @Schema(description = "用户查询自己的提问")
public class QuestionQueryDTO extends PageDTO{ public class QuestionQueryDTO extends PageDTO{
//场馆 // 场馆
@Schema(description = "场馆")
private String type; private String type;
//状态 // 状态
@Schema(description = "状态1待处理2已处理")
private Integer status; private Integer status;
// 用户编号
@Schema(description = "用户编号")
private Integer userId;
} }

@ -55,29 +55,8 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question>
@Override @Override
public Result userPage(QuestionQueryDTO dto) { public Result userPage(QuestionQueryDTO dto) {
Page<Question> page = Page.of(dto.getCurrent(), dto.getSize()); Page<Question> page = new Page<>(dto.getCurrent(), dto.getSize());
return Result.ok().message("查询成功");
page.addOrder(OrderItem.desc("created_time"));
LambdaQueryWrapper<Question> wrapper = new LambdaQueryWrapper<>();
if (dto.getStatus() != null) {
wrapper.eq(Question::getStatus, dto.getStatus());
}
if (dto.getType() != null) {
wrapper.eq(Question::getType, dto.getType());
}
Page<Question> resultPage = page(page, wrapper);
QueryVO<Question> vo = new QueryVO<>();
vo.setList(resultPage.getRecords());
vo.setTotal(resultPage.getTotal());
return Result.ok(vo).message("查询成功");
} }
@Override @Override

@ -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
Loading…
Cancel
Save