From 878150b38429d1a7f844f487a4cf1174d96e4145 Mon Sep 17 00:00:00 2001 From: qihai Date: Mon, 9 Jun 2025 15:41:26 +0800 Subject: [PATCH] =?UTF-8?q?ci:=20=E6=B7=BB=E5=8A=A0=20Drone=20CI=20?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6=E5=92=8C=20Docker=20?= =?UTF-8?q?=E9=83=A8=E7=BD=B2=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 .drone.yml 文件,配置 Maven 构建和 Docker 部署流程- 添加 docker.sh 脚本,用于构建和运行 Docker镜像 - 创建 Dockerfile,定义基于 OpenJDK 17 的 Docker 镜像 - 编写 start.sh 脚本,启动 Java 应用 --- .drone.yml | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ Dockerfile | 18 ++++++++++++++++++ docker.sh | 22 ++++++++++++++++++++++ start.sh | 8 ++++++++ 4 files changed, 99 insertions(+) create mode 100644 .drone.yml create mode 100644 Dockerfile create mode 100644 docker.sh create mode 100644 start.sh diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..3f420d2 --- /dev/null +++ b/.drone.yml @@ -0,0 +1,51 @@ +kind: pipeline +type: docker +name: ${serverName} # 服务名成,可与jar包名保持一致 + +steps: + - name: build-jar # 流水线名称 + image: maven:3.8.5-openjdk-17 # 定义创建容器的Docker镜像,基线项目使用jdk17 + volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置 + - name: maven-cache + path: /root/.m2 # 将maven下载依赖的目录挂载出来,防止重复下载 + - name: maven-build + path: /home/app/build # 将应用打包好的Jar和执行脚本挂载出来 + commands: # 定义在Docker容器中执行的shell命令 + - mvn clean package -DskipTests=true # 应用打包命 + - cp ${executePath} /home/app/build/${serverName}.jar # 需要修改提取的jar包位置,默认当前在根项目的target目录下,jar包名与后续执行需保持一致 + - cp start.sh /home/app/build/ + - cp Dockerfile /home/app/build/ +# - cp .dockerignore /home/app/build/ + - cp docker.sh /home/app/build/ + + - name: build-docker + image: docker + volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置 + - name: maven-build + path: /home/app/build # 将应用打包好的Jar和执行脚本挂载出来 + - name: docker + path: /var/run/docker.sock # 挂载宿主机的docker + settings: + dockerfile: /home/app/build/Dockerfile + commands: # 定义在Docker容器中执行的shell命令 + - cd /home/app/build + - chmod +x docker.sh + - sh docker.sh + - docker ps + +volumes: # 定义流水线挂载目录,用于共享数据 + - name: maven-build + host: + path: /home/data/maven/build # 从宿主机中挂载的目录 + - name: maven-cache + host: + path: /home/data/maven/cache + - name: docker + host: + path: /var/run/docker.sock + +#trigger: +# event: +# - custom +# ref: +# - refs/tags/version1.1 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..3948ad8 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,18 @@ +# 目前制作docker镜像依赖的jdk,基线项目使用jdk17 +FROM openjdk:17.0.2-oraclelinux8 + +ENV SERVICE_PORTS=${innerPort} + +RUN mkdir -p /home/app/ + +WORKDIR /home/app + +COPY ./start.sh /home/app/ +# COPY ./.dockerignore /home/app/ +# jar包名,建议与docker.sh和drone配置文件的服务名一致 +COPY ./${serverName}.jar /home/app/ + +RUN chmod 755 -R /home/app/ + + +ENTRYPOINT ["/home/app/start.sh"] diff --git a/docker.sh b/docker.sh new file mode 100644 index 0000000..780ade3 --- /dev/null +++ b/docker.sh @@ -0,0 +1,22 @@ +#!/bin/sh +# 定义应用组名 +group_name='${serverGroup}' +# 定义应用名称,建议与drone中服务名和jar包名保持一致 +app_name='${serverName}' +# 定义应用版本 +app_version='1.0' +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 ${outerPort}:${innerPort} --name ${app_name} \ +-e TZ="Asia/Shanghai" \ +-v /etc/localtime:/etc/localtime \ +-d ${group_name}/${app_name}:${app_version} +echo '----start container----' diff --git a/start.sh b/start.sh new file mode 100644 index 0000000..7fc0205 --- /dev/null +++ b/start.sh @@ -0,0 +1,8 @@ +#!/bin/sh +## jar包名,与之前服务名保持一致 +java -Xms128m -Xmx128m -jar /home/app/${serverName}.jar --spring.profiles.active=dev + +if [ $? != 0 ]; then + echo Failed to start java >&2 + exit 1 +fi