1.背景
Drone
是一个持续集成和持续交付的平台,可以与Docker
完美集成。相对于Jenkins
来说更加轻量,可以配合轻量的Gogs
来实现持续集成。
为什么选择Drone而不是Jenkins,为什么选择Gogs而不是gitlab,主要原因是因为更轻量,简洁,更适合自己研究或者小型企业项目(PS:当然也有一部分原因是博主的服务器资源有限,但又想强行玩CICD,哈哈。。。)
话不多说,下面开始操作:
2.Gogs部署
pull镜像:
docker pull gogs/gogs
部署服务:
docker run -d --name gogs -p 10022:22 -p 13000:3000 -v /apps/gogs/data:/data -v /etc/localtime:/etc/localtime gogs/gogs
备注:-v挂载Gogs数据/data目录到宿主机/apps/gogs/data目录,事先创建好
查看服务:
docker ps | grep gogs
备注:由于博主的gogs已配置好,所以服务状态是healthy,正常是starting状态,可以看到服务http访问暴露13000端口
访问服务:配置gogs,http://ip:13000
数据库配置:博主采用的mysql,可选择mysql、postgresql、sqlite3,事先在创建gogs数据库
应用基本配置:ip为部署Gogs宿主机ip或者可以配域名
可选配置:可以参考我的配置,个人建议管理员配一个
配置好后,点击立即安装,安装好后,Gogs仓库就搭建好了,访问ip:13000,用管理员账号密码即可登录
2.Drone部署
drone-server部署:
pull镜像:
docker pull drone/drone
部署服务:
docker run \
-v=/apps/drone/data:/data \
-v=/etc/localtime:/etc/localtime \
-v=/var/run/docker.sock:/var/run/docker.sock \
--env=DRONE_LOGS_TRACE=true \
--env=DRONE_LOGS_DEBUG=true\
--env=DRONE_AGENTS_ENABLED=true \
--env=DRONE_GIT_ALWAYS_AUTH=true \
--env=DRONE_RPC_SECRET=buxiangdagongle \
--env=DRONE_SERVER_HOST=http://ip:7777 \
--env=DRONE_SERVER_PROTO=http \
--env=DRONE_GOGS=true \
--env=DRONE_PROVIDER=gogs \
--env=DRONE_GOGS_SERVER=http://ip:13000 \
--env=DRONE_USER_CREATE=username:lizhi,admin:true \
--publish=7777:80 \
--restart=always \
--detach=true \
--name=drone-server \
drone/drone:latest
备注:事先在宿主机创建好数据挂载目录/apps/drone/data;DRONE_RPC_SECRET环境变量为与drone-agent通信secret,可自定义;DRONE_SERVER_HOST环境变量为drone-server界面访问地址配置;DRONE_GOGS_SERVER环境变量为上述搭建的Gogs仓库地址;DRONE_USER_CREATE环境变量为drone管理用户,一定要配置,尽量配置为Gogs管理员同步,不配置,drone pipeline docker无法挂载
查看服务:
docker ps | grep drone-server
drone-agent部署:
pull镜像:
docker pull drone/agent
部署服务:
docker run --detach \
-v=/etc/localtime:/etc/localtime \
-v=/var/run/docker.sock:/var/run/docker.sock \
--env=DRONE_RPC_PROTO=http \
--env=DRONE_RPC_HOST=ip:7777 \
--env=DRONE_RPC_SECRET=buxiangdagongle \
--env=DRONE_LOGS_TRACE=true \
--env=DRONE_LOGS_DEBUG=true \
--restart always \
--name drone-agent \
drone/agent:latest
备注:DRONE_RPC_SECRET环境变量配置与上述drone-server一致;DRONE_RPC_HOST环境变量为drone-server地址
查看服务:
docker ps | grep drone-agent
3.CICD测试验证
访问drone服务:浏览器输入drone-server配置的地址ip:7777
备注:如果Gogs仓库没有接入drone是没有上述绿色对钩显示的,应该都是初始化项目,能正常访问界面且能展示Gogs仓库项目说明搭建成功了!
配置仓库接入drone CICD:以博主的项目为例,在项目根目录下添加.drone.yml文件
.drone.yml文件内容如下:
kind: pipeline
name: easyoa-api-pipeline
steps:
- name: Maven编译
image: maven
volumes:
- name: cache
path: /root/.m2
commands:
- mvn clean install
- name: 部署服务
image: appleboy/drone-ssh
settings:
host: localhost #项目需要部署主机ip
username: root #部署主机ssh连接账号与密码,密码使用secret
password:
from_secret: ssh_password
port: 22
script: #部署脚本,可根据项目具体情况编写
- cd /apps/easyoa-api
- rm -rf api.jar
- mv /tmp/cache/.m2/repository/com/easyoa/api/1.0.0/api-1.0.0.jar api.jar
- sh start.sh
volumes:
- name: cache
host:
path: /tmp/cache/.m2 #容器挂载宿主机maven仓库,否则每次构建速度很慢
trigger:
branch:
- master #Gogs仓库分支
备注:上述配置中steps中涉及到的镜像,请确保能正确pull
drone-server界面配置项目:如没有项目请点击右上角SYNC按钮同步
点击项目目录-->Settings-->activate Repository 激活仓库
配置项目:Trusted选项一定要勾选,否则docker无法挂载,点击下方保存
备注:如果上述.drone.yml配置ssh连接主机密码为from_secret,需要在General下的Secrets添加key为主机ssh连接用户名,value为ssh主机连接密码的secret
验证服务自动化部署:往Gogs仓库提交代码即可验证
或者在Gogs仓库使用WEB钩子测试:
4.总结
好的,至此Drone+Gogs+Docker搭建轻量化CICD自动化部署已经完成,非常之强大,对于我自己做一些研究类项目很方便,最主要不吃资源(自己服务器资源有限,又爱玩)。
上述最后提到pipeline的.drone.yml文件配置还有更丰富的玩法,可以参考官方文档,此博客只是自己做的简单的满足项目部署需求,越简单越好。。。
官方文档地址:Drone CI / CD | Drone
写的比较急加上之前搭好的,如有问题欢迎讨论!