Loading... > **上篇文章讲到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 ``` ## **配置解析** 1. **kind 类型 这里就用pipeline管道类型即可** 2. **type 这里我们上文使用的是docker这里我们也要设置写docker** 3. **name 就是这个管道的名称** 4. **node对应上文讲的DRONE_RUNNER_LABELS参数用来指定哪个runner执行部署任务** 5. **volumes这里我们先看下这个配置,其实就是相当于我们定义宿主机的目录映射到每个step中的docker的目录,我们将宿主机的/root/docker/maven/build这个路径定义成maven-build这个标识的映射,会在后面的step中使用。** 6. **step对应的流水线步骤,每一个步骤都会使用对应的docker镜像** 7. **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,增加部署时间。** 8. **step之when,当点击promote时,才会执行,下文图会展示** 9. **step之deploy-start,本步骤中使用的是docker ssh镜像,来让drone可以远程的执行部署任务,先进入上部中构建的jar目录,然后运行自定义的部署脚本,下文会提供** ## **特别说明** ### **step中的from_secret如何配置** ![image-20220313224836993](https://image.juinjonn.com:8888/local/2023/01/13/63c10f72b44f8.png) **点击+ new secret按钮 会有如下弹窗** ![image-20220313230621071](https://image.juinjonn.com:8888/local/2023/01/13/63c10f73be1fa.png) ### **部署的时候,drone控制台报错无权限** **原因:在部署drone服务器的时候,启动参数没有设置** **DRONE_USER_CREATE 管理员用户名,建议填不然后面目录挂载会报权限不足错误,具体可查看本系列第一篇文章**[**Drone CI/CD系列(一)——docker安装与配置**](https://juinjonn.com/archives/25/) ### **promote** **当使用drone build构建完之后,点击右上角的三个点,就可以执行了创立了,并且会打一个tag,可以用来回滚使用** ![image-20220320130555764](https://image.juinjonn.com:8888/local/2023/01/13/63c10f7d0c499.png) ![image-20220320130725871](https://image.juinjonn.com:8888/local/2023/01/13/63c10f7b16265.png) **可以用来回滚使用使用** ## **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配置文件的部署,其实还是在于思路,就像开发逻辑一样,有了思路,其实部署各种语言都是一样的,选择适合自己项目或者公司的部署步骤!** ## **转载说明** ****本篇文章禁止私自转载,如需转载请联系作者,否则必追究法律责任!**** 最后修改:2023 年 01 月 13 日 © 禁止转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏