Drone+Gogs+docker搭建轻量CICD

1 篇文章 0 订阅
1 篇文章 0 订阅

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

写的比较急加上之前搭好的,如有问题欢迎讨论!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值