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