drone简介:
drone官方文档:https://docs.drone.io/
drone跟Jenkins一样,可实现持续集成,就是可以帮助我们解决重复的代码构建,自动化测试,发布等重复劳动,通过简单一个提交代码的动作,解决接下来要做的很多事。
Drone是一种基于容器技术的连续运输系统,所以安装也是基于docker安装。
相对于Jenkins,Jenkins虽然有100多种插件可实现复杂的功能,所以操作部署也是同样的复杂。
而drone,短小精悍,部署简单,比 Jenkins 语法简单,更加适合 云原生应用。
一、gitlab设置
gitlab搭建参考:Gitlab教程
在Applications选项填写Name 和 Redirect URI,Name取个好记得即可。
Redirect URI 为搭建drone的地址,后面需要以login结尾。
scopes根据自己选择,最后Save applications即可
保存后,记下相关信息,安装drone会用到。
设置Network,后续drone激活项目会使用到
二:docker安装drone Server和Runner
drone有个Server和Runner(Agent)的概念,我们先来理解下:
Server:为Drone的管理提供了Web页面,用于管理从Git上获取的仓库中的流水线任务。
Runner(Agent):一个单独的守护进程,会轮询Server,获取需要执行的流水线任务,之后执行。
drone-runner不是必选的,官方不推荐吧runner和server安装在一个实例上
先生产共享密钥,用于连接Server和Runner之间,两者需一致。
1.运行drone Server
(172.16.11.2这台服务器)
openssl rand -hex 16
拉取镜像
docker pull drone/drone
docker运行drone Server
docker run \
--volume=/var/lib/drone:/data \
--env=DRONE_AGENTS_ENABLED=true \
--env=DRONE_GITLAB_SERVER=http://172.16.11.1:82 \
--env=DRONE_GITLAB_CLIENT_ID=3810dcd600b97a6e329b15ff1d4d1d57745672c510e5ded042d4649355819c96 \
--env=DRONE_GITLAB_CLIENT_SECRET=4aced0924a86a0a9a2dc0da0e9cb63a7a3feb51a2de7b2a078ab1fa28e2a59e1 \
--env=DRONE_SERVER_HOST=172.16.11.2 \
--env=DRONE_SERVER_PROTO=http \
--env=DRONE_TLS_AUTOCERT=false \
--env=DRONE_LOGS_DEBUG=true \
--env=DRONE_RPC_SECRET=c99981a5bf29c1c9b2a4c94e894fad22 \
--env=DRONE_USER_CREATE=username:root,admin:true \
--publish=80:80 --publish=443:443 \
--restart=always \
--detach=true \
--name=drone \
-e TZ="Asia/Shanghai" \
drone/drone
解释:
http://172.16.11.1:82这个是我的gitlab服务,因为我的端口是配置了82
172.16.11.2 是drone本机
浏览器访问172.16.11.2,点击继续Continue,自动跳转gitlab,授权即可进入drone。
进入可看到gitlab所有项目,选择一个项目,点击进入activate 激活进入项目即可。
2.运行drone Runner(Agent)
拉取镜像,根据自己项目需要选择合适的runner。如有docker,k8s,exec,ssh等。
这里,我需要远程ssh部署,就选择ssh的runner,如果runner不合适,在构建时,会一直pending状态。
如果是docker项目,则拉取docker的镜像
docker pull drone/drone-runner-ssh
docker pull drone/drone-runner-docker
drone 已经正常,接下来需要Runner执行工作了。
docker run -d \
-v /var/run/docker.sock:/var/run/docker.sock \
-e DRONE_RPC_PROTO=http \
-e DRONE_RPC_HOST=172.16.11.2 \
-e DRONE_RPC_SECRET=c99981a5bf29c1c9b2a4c94e894fad22 \
-e DRONE_RUNNER_CAPACITY=2 \
-e DRONE_RUNNER_NAME=${HOSTNAME} \
-p 3000:3000 \
--restart always \
--name runner \
drone/drone-runner-ssh
运行成功后,查看日志,docker logs ffd3ef3090fc可查看是否连接成功。
successfully pinged the remote serve连接成功。
到这里drone安装完成。
三、用docker-compose安装drone(拓展)
既然可以用docker安装drone,那可以用docker-compose编排,更简单,不用每次run 很多命令参数,参数直接写在环境.env文件即可,有任何改动,只需要更改.env参数即可。
1.创建docker-compose工作目录及docker-compose文件
创建目录/docker_drone
mkdir /docker_drone
cd /docker_drone
vim docker-compose.yml
内容如下:
version: "3.3"
services:
drone-server:
image: drone/drone:latest
container_name: drone-server
networks:
- drone_net # 让drone-server和drone-agent处于一个网络中,方便进行RPC通信
ports:
- '80:80' # Web管理面板的入口 PROTO=http 时使用该端口
- '443:443' # Web管理面板的入口 PROTO=https 时使用该端口
- '9000:9000' # RPC服务端口
volumes:
- /var/run/docker.sock:/var/run/docker.sock # docker.sock [1]
- /var/data/drone/:/var/lib/drone # drone数据存放路径
environment:
- DRONE_AGENTS_ENABLED=true # 使用Runner
- DRONE_GITLAB_SERVER=${DRONE_GITLAB_SERVER} # gitlab的地址
- DRONE_GITLAB_CLIENT_ID=${DRONE_GITLAB_CLIENT_ID} # gitlab获得的ClientID
- DRONE_GITLAB_CLIENT_SECRET=${DRONE_GITLAB_CLIENT_SECRET} # gitlab获得的ClientSecret
- DRONE_RPC_SECRET=${DRONE_RPC_SECRET} # RPC秘钥 [2]
- DRONE_SERVER_HOST=${DRONE_SERVER_HOST} # RPC域名(在一个实例上可以不用)
- DRONE_SERVER_PROTO=${DRONE_SERVER_PROTO} # git webhook使用的协议(建议http)
- DRONE_OPEN=true # 开发drone
- DRONE_DATABASE_DATASOURCE=/var/lib/drone/drone.sqlite # 数据库文件
- DRONE_DATABASE_DRIVER=sqlite3 # 数据库驱动,我这里选的sqlite
- DRONE_DEBUG=true # 调试相关,部署的时候建议先打开
- DRONE_LOGS_DEBUG=true # 调试相关,部署的时候建议先打开
- DRONE_LOGS_TRACE=true # 调试相关,部署的时候建议先打开
- DRONE_USER_CREATE=username:root,admin:true # 初始管理员用户
- TZ=Asia/Shanghai # 时区
restart: always
drone-runner:
image: drone/drone-runner-ssh:latest
container_name: drone-runner
networks:
- drone_net # 让drone-server和drone-agent处于一个网络中,方便进行RPC通信
depends_on:
- drone-server
volumes:
- /var/run/docker.sock:/var/run/docker.sock # docker.sock [1]
environment:
- DRONE_RPC_HOST=${DRONE_RPC_HOST} # RPC服务地址
- DRONE_RPC_SECRET=${DRONE_RPC_SECRET} # RPC秘钥
- DRONE_RPC_PROTO=${DRONE_RPC_PROTO} # RPC协议(http || https)
- DRONE_RUNNER_CAPACITY=2 # 最大并发执行的 pipeline 数
- DRONE_DEBUG=true # 调试相关,部署的时候建议先打开
- DRONE_LOGS_DEBUG=true # 调试相关,部署的时候建议先打开
- DRONE_LOGS_TRACE=true # 调试相关,部署的时候建议先打开
- TZ=Asia/Shanghai
restart: always
networks:
drone_net:
# 注意空格格式,否则报错,让drone-server和drone-agent处于一个网络中,方便进行RPC通信
2.编辑.env环境
cd /docker_drone
vim .env
根据自己实际的参数修改
内容如下:
DRONE_GITLAB_SERVER=http://172.16.11.1
DRONE_GITLAB_CLIENT_ID=3810dcd600b97a6e329b15ff1d4d1d57745672c510e5ded042d4649355819c96
DRONE_GITLAB_CLIENT_SECRET=4aced0924a86a0a9a2dc0da0e9cb63a7a3feb51a2de7b2a078ab1fa28e2a59e1
DRONE_RPC_SECRET=c99981a5bf29c1c9b2a4c94e894fad22
DRONE_SERVER_HOST=172.16.11.2
DRONE_SERVER_PROTO=http
DRONE_RPC_HOST=172.16.11.2
DRONE_RPC_PROTO=http
3.启动测试
docker-compose up -d
到这里drone创建完成。
搭建完成,开始下一步,使用Drone自动构建项目