docker+drone+gogs自动化部署Java项目
欢迎来到我的小屋
一、前言
笔者根据链接文章搭建的自动化部署服务,搭建过程中对于.drone.yml配置部分很难理解,所以搭建完服务后,写了这一片随笔,记录一下.drone.yml相关配置文件的配置。本文主要详解.drone.yml相关的配置文件,其他步骤配置可参考:标题二
二、安装与配置
该部分参考:三、.drone.yml配置
1.环境
SpringBoot:3.5.3
JDK:21
2. .drone.yml配置
流水线配置步骤流程为:1.打包,2.通过ssh控制部署服务器部署jar包
kind: pipeline # 定义对象类型,还有secret和signature两种类型
type: docker # 定义流水线类型,还有kubernetes、exec、ssh等类型
name: iyu # 定义流水线名称
steps: # 定义流水线执行步骤,这些步骤将顺序执行
- name: build-package # 流水线名称
image: centos:7.9.2009 # 定义创建容器的Docker镜像
volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置
- name: maven-cache
path: /root/.m2 # 将maven下载依赖的目录挂载出来,防止重复下载
- name: maven-build
path: /app/build # 将应用打包好的Jar和执行脚本挂载出来
- name: environment
path: /app/environment
commands: # 定义在Docker容器中执行的shell命令
- export JAVA_HOME=/app/environment/jdk-21.0.8
# 将 JAVA_HOME 添加到 PATH
- export PATH=$JAVA_HOME/bin:$PATH
# 使用绝对路径执行 Maven 和 Java 命令
- /app/environment/apache-maven-3.9.11/bin/mvn -v
- /app/environment/jdk-21.0.8/bin/java -version
# 执行 Maven 打包命令
- /app/environment/apache-maven-3.9.11/bin/mvn clean package
- cp target/*.jar /app/build/iyu.jar
- cp Dockerfile /app/build/Dockerfile
- cp run.sh /app/build/run.sh
- cp start.sh /app/build/start.sh
- name: deploy-start
image: appleboy/drone-ssh # SSH工具镜像
settings:
host: x.x.x.x # 远程连接地址
username: root # 远程连接账号
password:
from_secret: ssh_password # 从Secret中读取SSH密码
port: 22 # 远程连接端口
command_timeout: 5m # 远程执行命令超时时间
script:
- cd /cache/drone/maven/iyu/build # 进入宿主机构建目录
- chmod +x run.sh # 更改为可执行脚本
- ./run.sh # 运行脚本打包应用镜像并运行
volumes: # 定义流水线挂载目录,用于共享数据
- name: maven-build
host:
path: /cache/drone/maven/iyu/build # 从宿主机中挂载的目录
- name: maven-cache
host:
path: /cache/drone/maven/iyu/.m2
- name: environment
host:
path: /home/maven3.6-jdk21
配置步骤打包时,由于docker源没有适合镜像(Maven要求3.8以上,JDK要21),所以采用自己挂载环境。
3. 其他文件配置
Java项目自定义镜像Dockerfile
#指定了基础镜像为 khipu/openjdk17-alpine,即使用了 OpenJDK 17 的 Alpine 版本作为基础
FROM openjdk:21
#设置了一个名为 SERVIECE_PORT 的环境变量,并将其值设为 8092
ENV SERVIECE_PORT = 8092
# 容器里 新建目录 iyu
RUN mkdir -p /iyu/
# 工作区
WORKDIR /iyu
# 复制操作
#将宿主机当前目录下的 *.jar 文件复制到容器的 /iyu/ 目录下
COPY ./*.jar /iyu/
COPY ./start.sh /iyu/
# 添加环境变量
ENV IYU_PRI_KEY XXXXXXX
ENV IYU_PUB_KEY XXXXXXX
#对 /iyu/ 目录及其子目录下的所有文件赋予可执行权限
RUN chmod 755 -R /iyu/
RUN chmod +x /iyu/start.sh
#设置容器的入口点为 /third_platform_admin/start.sh,即在容器启动时执行该脚本
ENTRYPOINT ["/bin/bash", "/iyu/start.sh"]
drone部署流水线步骤执行脚本run.sh
#!/usr/bin/env bash
# 定义应用组名
group_name='aliang'
# 定义应用名称
app_name='iyu'
# 定义应用版本
app_version='latest'
# 定义应用环境
profile_active='dev'
echo $app_name
docker stop iyu
echo '----stop container----'
docker rm iyu
echo '----rm container----'
docker rmi aliang/iyu:latest
echo '----rm image----'
# 打包编译docker镜像
docker build -t aliang/iyu:latest .
echo '----build image----'
docker run -p 8092:8092 --name iyu \
-e TZ="Asia/Shanghai" \
-v /etc/localtime:/etc/localtime \
-d aliang/iyu:latest
echo '----start container----'
Java项目镜像执行脚本start.sh
java -Xms128m -Xmx128m -jar /iyu/*.jar --spring.profiles.active=dev 2>/tmp/java_error.log if [ $? != 0 ]; then echo "Failed to start java. See error log for details." >&2 echo "Error log:" >&2 cat /tmp/java_error.log >&2 exit 1 fi
四、本人遇到的问题
1. 打包步骤,需要jdk21+maven3.8环境,自定义docker镜像后,需要上传私人docker源,无奈挂载环境进行打包
2. 不理解每个组件,元素的概念,简单说一下自己的理解:drone server是任务派发人,每当有流水线任务处理时,drone server会派发给drone runner,runner执行流水线任务。流水线任务里面分多个步骤,每个步骤在独立容器中执行,部署步骤在容器中执行时,用ssh远程操控服务器进行部署。

主要介绍关于.drone.yml配置方面的问题
浙公网安备 33010602011771号