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远程操控服务器进行部署。

 
posted @ 2025-08-07 14:49  一愚亮  阅读(186)  评论(0)    收藏  举报