正文
之前一直使用的是 Jenkins+Gitlab 作CI/CD,
Jenkins是一款强大的持续集成/持续部署工具,广泛应用于软件开发和部署领域
。但是当今互联网逐渐走向容器化, Jenkins 的一些弊端也凸显了出来:
重量级:
Jenkins 功能十分齐全,几乎可以做所有的事情。但是这也是他的一个弊端,过于重量级,有时候往往一个小的修改需要改动许多地方,升级\下载插件后需要进行重启等。
配置复杂
:Jenkins的配置相对比较复杂,尤其是在安装和配置插件时。有时候可能会遇到配置错误或兼容性问题,导致工具无法正常工作。
初学者学习困难:
Jenkins是一款功能强大的工具,包含了大量的特性和插件。对于初学者来说,可能会觉得它的学习曲线比较陡峭,需要花费大量的时间和精力去学习和掌握。
所以,在当今容器化时代,选择一个合适的工具来做CICD是一个比较重点关注的事,那么本文说的这个工具就是——Drone。
Drone是一个基于Go语言开发的持续集成/持续部署(CI/CD)工具,由前Google员工于2013年开源。Drone通过引入pipline的概念,将整个构建过程由多个阶段(stage)组成,每个阶段都是一个Docker。这些阶段间可以通过共享宿主机的磁盘目录实现数据共享和缓存基础数据,以加速下次构建。此外,各阶段也可以共享宿主机的Docker环境,实现共享宿主机的Docker镜像,从而避免每次构建都重新拉取基础镜像,减少构建时间。
Drone的优势在于其并发运行能力。多个构建可以并发运行,单机并发数量由服务器CPU数决定。此外,Drone由开发者负责打包镜像和流程控制,无需运维参与在CI服务器上部署各种语言编译需要的环境。这使得Drone成为DevOps的最佳实践。
它主要具有以下方面优点:
功能强大且灵活:
Drone通过简单的YAML配置文件来定义和执行Docker容器中的管道,可以完成构建、测试、发布和部署等任务,具有高度的可配置性。
兼容性好:
Drone支持所有SCM、所有平台和所有语言环境,可以轻松集成到现有的工作流程中。
部署简单:
Drone原生支持Docker容器,启动两个容器即可完成部署,其他构建、测试、部署工具在使用时会自动从Docker仓库拉取。
扩展性强:
Drone拥有强大的插件系统,丰富的插件可以免费使用,也可以自定义配置,满足各种扩展需求。
维护简单:
Drone直接复用SCM的账号体系和权限管理,无需注册用户、分配权限,大大简化了维护工作
前置条件:服务器得先安装好Docker(本文不讲述Docker的安装)
在这里,使用Gitlab作为Drone的账号和权限管理,所以首先在你自己的Gitlab服务上面新增一个应用:
记录下此处的应用程序id及密码,后续安装Drone时会使用该ID
#创建共享密钥,用于drone服务和runner之间通信
[root@master application]# openssl rand -hex 16
b63a8848e42f3d96108e04a5fb99f41e
#安装Drone
[root@master application]# docker run \
--volume=/var/lib/drone:/data \
--env=DRONE_GITLAB_SERVER=http://192.168.0.150:9090 \
--env=DRONE_GITLAB_CLIENT_ID=8bae21f3d3c8b5a722ae1aa55c61eb6dbd14d9e1aca9a7f720fb638a3ca4c5ca \
--env=DRONE_GITLAB_CLIENT_SECRET=b0927a462d5c19eae39216483ee7a0d83f8c31e5c7b2011c9bb6a8c976a3cd0b \
--env=DRONE_RPC_SECRET=b63a8848e42f3d96108e04a5fb99f41e \
--env=DRONE_SERVER_HOST=192.168.0.150:7070 \
--env=DRONE_SERVER_PROTO=http \
--env=DRONE_USER_CREATE=username:root,admin:true \
--publish=7070:80 \
--publish=8443:443 \
--restart=always \
--detach=true \
--name=drone \
drone/drone:2
Unable to find image 'drone/drone:2' locally
2: Pulling from drone/drone
79e9f2f55bf5: Pull complete
21e4c61aedb1: Pull complete
fb8c70c372db: Pull complete
50712e01f221: Pull complete
Digest: sha256:32c78ab006ff82cfe327088b763cf64e7435784fd1131284ebd5bcaf5ca5c43e
Status: Downloaded newer image for drone/drone:2
314b72c95949247f6ebec71c5d089dee87ab541100576d0789af415e86cc5ab4
#安装runner
[root@master application]# docker run --detach \
> --volume=/var/run/docker.sock:/var/run/docker.sock \
> --env=DRONE_RPC_PROTO=http \
> --env=DRONE_RPC_HOST=192.168.0.150:7070 \
> --env=DRONE_RPC_SECRET=b63a8848e42f3d96108e04a5fb99f41e \
> --env=DRONE_RUNNER_CAPACITY=2 \
> --env=DRONE_RUNNER_NAME=my-first-runner \
> --publish=3000:3000 \
> --restart=always \
> --name=runner \
> drone/drone-runner-docker:1
Unable to find image 'drone/drone-runner-docker:1' locally
1: Pulling from drone/drone-runner-docker
97518928ae5f: Pull complete
4af047b71fe6: Pull complete
de9b7e52f3f6: Pull complete
679d1ec5770c: Pull complete
Digest: sha256:70da970bb76a62567edbea1ac8002d9484664267f4cbb49fbd7c87a753d02260
Status: Downloaded newer image for drone/drone-runner-docker:1
d542e08d542678d37d9d588bb24d2916b575593c448a59c998631a1f25fc76b0
--env=DRONE_USER_CREATE=username:root,admin:true 这个必须要配置,标识Drone的管理员是哪个,不然drone项目激活后设置页面出现不了Trusted选项。会操作不了Drone的设置。安装好后首页如图:
点击继续,会跳转到gitlab页面赋权:
赋权后会出现你有权限的代码分支,选择一个激活,然后在设置页勾选Trust
kind: pipeline
name: default
steps:
- name: depend
image: maven:3.8.1-jdk-8
volumes:
- name: cache
path: /root/.m2
- name: study-jar
path: /root/study-jar
commands:
- mvn clean install
- rm -rf /root/study-jar/* && bash -x copy_to_host.sh
- name: deploy
image: appleboy/drone-ssh
settings:
host: 192.168.0.150
port: 22
command_timeout: 10m
username: root
password:
from_secret: ssh_password
script:
- cd /home/study-data/study-jar/ && bash -x build.sh
volumes:
#maven本地仓库缓存路径
- name: cache
host:
path: /root/maven/lib
#编译后lib及jar复制目标路径
- name: study-jar
host:
path: /home/study-data/study-jar
trigger:
branch:
- dev
新增并且配置好后,在dev提交代码,就会执行steps里的步骤啦!提交代码后,再看Drone的页面,已经显示有代码提交上来。
Drone提供了类似jenkins的插件支持,支持很多额外插件功能的使用,比如:发邮件、SSH、SonarQube代码质量分析和管理等等。插件市场是应有尽有,而且配置简单没有jenkins那么复杂。有兴趣的朋友可以尝试去配置体验下,真的是非常之强大的!
官网地址:drone.io
文档地址:docs.drone.io