简介上篇文章讲到python脚本如何搭配drone来进行部署,本篇文章来讲解java springboot如何搭配drone来进行部署集成!
本文整体思路还是应用drone的docker流水线特性,整体步骤分为3步,第一步先使用maven镜像将springboot打包成为jar包,将jar从docker镜像拷贝到宿主机目录。第二步使用docker的ssh镜像将jar包build成docker的镜像。第三步将打包好的镜像构建成运行的容器。
.drone.yml老规矩,先看配置文件
kind: pipeline # 定义对象类型,还有secret和signature两种类型
type: docker # 定义流水线类型,还有kubernetes、exec、ssh等类型
name: jar-deploy # 定义流水线名称
node:
name: centos-runner
steps: # 定义流水线执行步骤,这些步骤将顺序执行
- name: build-package # 流水线名称
image: maven:3.8-openjdk-11 # 定义创建容器的Docker镜像
volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置
- name: maven-cache
path: /root/.m2 # 将maven下载依赖的目录挂载出来,防止重复下载
- name: maven-build
path: /app/build # 将应用打包好的Jar和执行脚本挂载出来
commands: # 定义在Docker容器中执行的shell命令
- mvn clean package # 应用打包命令
- cp target/demo-1.0.0.jar /app/build/demo-1.0.0.jar
- cp Dockerfile /app/build/Dockerfile
- cp run.sh /app/build/run.sh
- name: deploy-start
image: appleboy/drone-ssh # SSH工具镜像
settings:
host: 192.168.31.83 # 远程连接地址
username: root # 远程连接账号
password:
from_secret: ssh_password # 从Secret中读取SSH密码
port: 22 # 远程连接端口
command_timeout: 5m # 远程执行命令超时时间
script:
- cd /root/docker/maven/build # 进入宿主机构建目录
- chmod +x run.sh # 更改为可执行脚本
- ./run.sh # 运行脚本打包应用镜像并运行
when:
event:
- promote
volumes: # 定义流水线挂载目录,用于共享数据
- name: maven-build
host:
path: /root/docker/maven/build # 从宿主机中挂载的目录
- name: maven-cache
host:
path: /root/docker/maven/cache
配置解析
kind 类型 这里就用pipeline管道类型即可
type 这里我们上文使用的是docker这里我们也要设置写docker
name 就是这个管道的名称
node对应上文讲的DRONE_RUNNER_LABELS参数用来指定哪个runner执行部署任务
volumes这里我们先看下这个配置,其实就是相当于我们定义宿主机的目录映射到每个step中的docker的目录,我们将宿主机的/root/docker/maven/build这个路径定义成maven-build这个标识的映射,会在后面的step中使用。
step对应的流水线步骤,每一个步骤都会使用对应的docker镜像
step之build-package,本步骤中使用的是dockerhub中的maven:3.8-openjdk-11官方镜像,镜像中包含maven3.8和jdk11。首先step中的volumes配置,这里会引用刚刚外层定义的volumes的路径,所以相当于本步骤的中镜像目录/app/build映射到宿主机的/root/docker/maven/build这个目录。commands配置就是在对应的docker镜像中执行的命令,这里执行了基本的maven打包命令。有一点需要说明的是,这里我们将maven:3.8-openjdk-11镜像中的.m2目录映射到宿主机目录了,原因是当该镜像执行完后会被销毁,所以给maven做了个缓存,防止每次部署的时候都要重新从中央仓库下载jar,增加部署时间。
step之when,当点击promote时,才会执行,下文图会展示
step之deploy-start,本步骤中使用的是docker ssh镜像,来让drone可以远程的执行部署任务,先进入上部中构建的jar目录,然后运行自定义的部署脚本,下文会提供
点击+ new secret按钮 会有如下弹窗
部署的时候,drone控制台报错无权限原因:在部署drone服务器的时候,启动参数没有设置
DRONE_USER_CREATE 管理员用户名,建议填不然后面目录挂载会报权限不足错误,具体可查看本系列第一篇文章Drone CI/CD系列(一)——docker安装与配置
promote当使用drone build构建完之后,点击右上角的三个点,就可以执行了创立了,并且会打一个tag,可以用来回滚使用
可以用来回滚使用使用
run.sh配置解析#!/usr/bin/env bash
# 定义应用组名
group_name='juinjonn'
# 定义应用名称
app_name='demo'
# 定义应用版本
app_version='latest'
# 定义应用环境
profile_active='prod'
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 8181:8181 --name ${app_name}
-e TZ="Asia/Shanghai"
-v /etc/localtime:/etc/localtime
-d ${group_name}/${app_name}:${app_version}
echo '----start container----'
总结
整体springboot drone搭建部署完成,并把构建和部署分离,来保证线上发布的稳定性!
drone配置文件的部署,其实还是在于思路,就像开发逻辑一样,有了思路,其实部署各种语言都是一样的,选择适合自己项目或者公司的部署步骤!
转载说明本篇文章禁止私自转载,如需转载请联系作者,否则必追究法律责任!



