基于码云Gitee + Drone CI搭建轻量级CI/CD自动构建平台(Jenkins替代方案)

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

一、drone简介

drone是一个golang编写的轻量级持续集成平台,它是原生Docker,所有的进程都在容器内进行。这使得Drone非常适合像Kubernetes这样的平台,因为在Kubernetes上启动容器很简单。

如果你觉得jenkins太复杂可以尝试以下使用drone替代,drone所有构建步骤都是以docker镜像提供的插件完成的,官方和社区都提供了很多高质量的插件(类似钉钉消息、微信消息、aws支持等),如果业务太复杂也可以自行开发插件或使用一个基础镜像通过脚本完成构建。

使用过程中如发现bug可以到社区寻求帮助

官方及社区收录的插件库

drone github仓库

drone社区

二、drone+gitee

drone从v2.7.2版本开始支持gitee

官方文档

1. 创建oauth2应用

右上角头像->设置->第三方应用->创建应用

配置如下图,应用主页填你准备部署drone的服务器域名或ip,应用回调地址在drone访问链接后跟/login,权限至少选择projectspull_requestsnoteshook

创建第三方应用

2. 生成rpc密钥

drone server和drone runner通信的密钥,可以使用openssl生成,这个密钥后面部署drone serverdrone runner都需要使用

$ openssl rand -hex 16
bea26a2221fd8090ea38720fc445eca6

3. 部署drone

直接使用docker-compose部署,按配置说明修改对应配置

简单的docker-compose.yml

version: '3'

services:

  server:
    image: drone/drone
    ports:
    - 80:80
    - 443:443
    volumes:
    - /opt/drone/data:/data:rw
    networks:
    - drone
    restart: always
    environment:
	# 你的服务器域名或ip
    - DRONE_SERVER_HOST=your.company.com
    # 使用的协议http或者https
    - DRONE_SERVER_PROTO=http
    # runner通信密钥,后面runner也要配置相同的值
    - DRONE_RPC_SECRET=d7daxxxxxxxxxxxx1a8b
    # gitee第三方应用client id
    - DRONE_GITEE_CLIENT_ID=dba7xxxxxxxxxxxx4eb9
    # gitee第三方应用client secret
    - DRONE_GITEE_CLIENT_SECRET=ea5exxxxxxxxxxxx748d
    # 默认创建账户,设置你的gitee用户名,这样你登录后是作为管理员
    - DRONE_USER_CREATE=username:your_gitee_username,admin:true

  runner:
    image: drone/drone-runner-docker
    restart: always
    ports:
    - 3000:3000
    networks:
    - drone
    depends_on:
    - server
    volumes:
    # 挂载宿主机的docker sock,runner实际还是使用的宿主机的docker daemon
    - /var/run/docker.sock:/var/run/docker.sock:rw
    environment:
    # 与drone server通信的协议http/https
    - DRONE_RPC_PROTO=http
    # drone server服务器
    - DRONE_RPC_HOST=your.company.com
    # drone server rpc密钥
    - DRONE_RPC_SECRET=d7daxxxxxxxxxxxx1a8b
    # runner name,标识runner
    - DRONE_RUNNER_NAME=runner
    # runner最多同时执行任务数
    - DRONE_RUNNER_CAPACITY=2
    # runner使用协议http/https
    - DRONE_HTTP_PROTO=http
    # runner的host,server向runner主动推送任务时使用此配置,如果在不同服务器此处应该设置为runner的域名或ip,此处是同一服务器,所以使用docker service name是可以直接访问的
    - DRONE_HTTP_HOST=runner

networks:
  drone:

更为详细的docker-compose.yml

version: '3'

services:

  server:
    image: drone/drone
    ports:
    - 80:80
    - 443:443
    volumes:
    - /opt/drone/data:/data:rw
    networks:
    - drone
    restart: always
    environment:
	# 你的服务器域名或ip
    - DRONE_SERVER_HOST=your.company.com
    # 使用的协议http或者https
    - DRONE_SERVER_PROTO=https
    # 使用https时你的ssl证书路径
    - DRONE_TLS_CERT=/data/your.company.com.pem
    # 使用https时你的ssl证书密钥路径
    - DRONE_TLS_KEY=/data/your.company.com.key
    # runner通信密钥,后面runner也要配置相同的值
    - DRONE_RPC_SECRET=d7daxxxxxxxxxxxx1a8b
    # gitee第三方应用client id
    - DRONE_GITEE_CLIENT_ID=dba7xxxxxxxxxxxx4eb9
    # gitee第三方应用client secret
    - DRONE_GITEE_CLIENT_SECRET=ea5exxxxxxxxxxxx748d
    # 默认创建账户,设置你的gitee用户名,这样你登录后是作为管理员
    - DRONE_USER_CREATE=username:your_gitee_username,admin:true
    # drone各日志功能
    - DRONE_LOGS_DEBUG=true
    - DRONE_LOGS_TRACE=true
    - DRONE_LOGS_COLOR=true
    - DRONE_LOGS_PRETTY=true
    - DRONE_LOGS_TEXT=true

  runner:
    image: drone/drone-runner-docker
    restart: always
    ports:
    - 3000:3000
    networks:
    - drone
    depends_on:
    - server
    volumes:
    - /var/run/docker.sock:/var/run/docker.sock:rw
    environment:
    # 与drone server通信的协议http/https
    - DRONE_RPC_PROTO=https
    # drone server服务器
    - DRONE_RPC_HOST=your.company.com
    # drone server rpc密钥
    - DRONE_RPC_SECRET=d7daxxxxxxxxxxxx1a8b
    # runner name,标识runner
    - DRONE_RUNNER_NAME=runner
    # runner最多同时执行任务数
    - DRONE_RUNNER_CAPACITY=2
    # runner使用协议http/https
    - DRONE_HTTP_PROTO=http
    # runner的host,server向runner主动推送任务时使用此配置,如果在不同服务器此处应该设置为runner的域名或ip,此处是同一服务器,所以使用docker service name是可以直接访问的
    - DRONE_HTTP_HOST=runner
    # 是否开启runner ui
    - DRONE_UI_DISABLE=true
    # 访问runner ui时的登录用户名
    - DRONE_UI_USERNAME=runner_admin_username
    # 访问runner ui时的登录密码
    - DRONE_UI_PASSWORD=runner_admin_password

networks:
  drone:

三、gitee插件

由于gitee没有提供类似github/gitlab那样status的api,所以在pr中跳转到三方平台基本只能靠评论。可以使用这个插件kit101z/drone-plugin-gitee-pulls实现在pr评论中更新build任务状态及快速访问的链接。

github status效果图:

github status效果

kit101z/drone-plugin-gitee-pulls仓库文档也提供了示例,以下为效果图:

drone-plugin-gitee-pulls效果

镜像链接:https://hub.docker.com/r/kit101z/drone-plugin-gitee-pulls

源码仓库:https://github.com/kit101/drone-plugin-gitee-pulls

这个插件有个问题就是开始时会在clone步骤之后执行,如果clone时间比较长,pr中的评论、label会延迟很久。
后续计划利用drone的webhook实现。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值