再见|再见 Jenkins !这款神器有点厉害!轻松搞定自动化部署

在日常开发、测试或运维环境中,我们对于自动化部署的需求日益强烈。
用过 SVN 的小伙伴们,都应该知道hooks(钩子)这个功能,的确日常企业内部测试环境经常会用过这个“特殊”的功能,通过这个功能来 实现自动更新发布代码的功能。
后面又逐渐引入了持续集成、持续部署,最常用的就是通过Jenkins来配合其它的代码管理工具或平台来实现上述的功能。之前也写过不少的介绍文章:Jenkins+Maven+Svn实现代码自动打包与发布,使用 Gitlab+Jenkins 实现多分支自动独立部署,有兴趣的读者可以自行查阅。
但是,基于上面的模式,大家也都知道,有一些不足的地方,第一就是部署环境比较麻烦,一堆的组件需要安装,第二对服务器本身的资源条件要求较高。最近发现一个很牛逼的工具 Drone(你还在用 Jenkins ?赶快看看这些替代方案吧!),比上面的工具算是轻量级的选手,但同样能实现自动化部署的功能,所以,今天民工哥给大家分享一下这款吊炸天的工具。
简介 再见|再见 Jenkins !这款神器有点厉害!轻松搞定自动化部署
文章图片

Drone 是一种基于容器技术的持续交付系统。Drone 使用简单的 YAML 配置文件来定义和执行 Docker 容器中的 Pipelines。目前在 Github上已经有 23.2K+ Star了,说明非常受欢迎的。
再见|再见 Jenkins !这款神器有点厉害!轻松搞定自动化部署
文章图片

Drone 与流行的源代码管理系统无缝集成,包括 GitHub,GitHub Enterprise,Bitbucket 等。
前期环境配置 使用 github 做为代码管理仓库(其它的也可以,这个比较方便)
打开github.com点击头像,选择Settings/Developer settings/OAuth Apps,然后点击New OAuth App创建OAuth应用。
再见|再见 Jenkins !这款神器有点厉害!轻松搞定自动化部署
文章图片

再见|再见 Jenkins !这款神器有点厉害!轻松搞定自动化部署
文章图片

其中 http://drone.mingongge.com 是你部署Drone的域名,注意Authorization callback URL 这个地址不要填写错了。
再见|再见 Jenkins !这款神器有点厉害!轻松搞定自动化部署
文章图片

其中的ClientID和ClientSecret注意保存好,后面需要用到。
部署Drone 注意:安装Drone需要一个drone-server和drone-runner,
drone-runner不是必选的,官方也不推荐将runner和server安装在同一台服务器上,如果你要这样安装的话可以设置DRONE_AGENTS_ENABLED=false,drone-server将会作为默认的runner,本文是将runner和server安装在同一服务器上。

# Drone的Server docker pull drone/drone:1# Drone的Runner docker pull drone/drone-runner-docker:1

安装drone-server
docker run \ --volume=/var/lib/drone:/data \ --env=DRONE_GITHUB_CLIENT_ID={{DRONE_GITHUB_CLIENT_ID}} \ --env=DRONE_GITHUB_CLIENT_SECRET={{DRONE_GITHUB_CLIENT_SECRET}} \ --env=DRONE_RPC_SECRET={{DRONE_RPC_SECRET}} \ --env=DRONE_SERVER_HOST={{DRONE_SERVER_HOST}} \ --env=DRONE_SERVER_PROTO={{DRONE_SERVER_PROTO}} \ --env=DRONE_USER_CREATE=username:USER_NAME,admin:true \ --publish=80:80 \ --publish=443:443 \ --restart=always \ --detach=true \ --name=drone \ drone/drone:1

参数说明
DRONE_GITHUB_CLIENT_ID #在上一步中生成的 GitHub oauth 客户端 ID DRONE_GITHUB_CLIENT_SECRET #在上一步中生成的 GitHub oauth 客户端密钥 DRONE_RPC_SECRET #提供在上一步中生成的共享密钥。这用于验证服务器和运行程序之间的 rpc 连接。服务器和运行器必须提供相同的秘钥值。 DRONE_SERVER_HOST #服务器对外提供的或访问的域名,也可以是IP地址,用IP+端口的方式来配置 DRONE_SERVER_PROTO #必需的字符串值提供您的外部协议方案。此值应设置为 http 或 https。 DRONE_USER_CREATE #初始管理员用户

安装drone-runner-docker
$ docker run -d \ -v /var/run/docker.sock:/var/run/docker.sock \ -e DRONE_RPC_PROTO=https \ -e DRONE_RPC_HOST=drone.mingongge.com \ -e DRONE_RPC_SECRET=super-duper-secret \ -e DRONE_RUNNER_CAPACITY=2 \ -e DRONE_RUNNER_NAME=${HOSTNAME} \ -p 3000:3000 \ --restart always \ --name runner \ drone/drone-runner-docker:1

参数说明
DRONE_RPC_HOST #提供 Drone 服务器的主机名(和可选端口)。运行器连接到主机地址处的服务器以接收管道以供执行。 DRONE_RPC_PROTO #提供用于连接到您的 Drone 服务器的协议。该值必须是 http 或 https。 DRONE_RPC_SECRET #提供用于与您的 Drone 服务器进行身份验证的共享密钥。这必须与您的 Drone 服务器配置中定义的秘密相匹配。

管理使用操作 然后打开浏览器,输入服务器的域名或者IP+端口,就可以访问drone的管理页面了。
再见|再见 Jenkins !这款神器有点厉害!轻松搞定自动化部署
文章图片

如果你github上有创建过项目代码仓库,这里的页面就会显示,如果没有显示,点击SYNC同步一下。

接下来我们需要对仓库进行设置,点击项目然后将仓库设置为 Trusted,点击SAVE保存即可。

然后在github上就会生成一个Webhooks,通过这个来触发drone执行作业。
再见|再见 Jenkins !这款神器有点厉害!轻松搞定自动化部署
文章图片

创建Secrets
再见|再见 Jenkins !这款神器有点厉害!轻松搞定自动化部署
文章图片

其实整个流程和jenkins很像,向代码仓库提交代码更新时,就会自动触发Webhooks,然后Drone就会从代码仓库Clone代码,再通过这个.drone.yml(相当于java使用的pom.xml文件)配置,执行相应的流水线操作。
比如写一个这样的简单的文件
kind: pipeline type: kubernetes name: defaultsteps: - name: drone_deploy image: alpine commands: - echo hello - echo world

然后执行操作推送到代码仓库
git add . git commit -m 'deploy test by mingongge' git remote add origin mingongge@github.com:mingongge/dronetest.git git push -u origin master

通过drone管理页面查看结果
再见|再见 Jenkins !这款神器有点厉害!轻松搞定自动化部署
文章图片

而且流水线的操作也是成功,返回相关的信息如下
再见|再见 Jenkins !这款神器有点厉害!轻松搞定自动化部署
文章图片

相比较于Jenkins的操作,似乎要简单许多,重点的操作就是编写好配置文件.drone.yml,其它的都是一些图形化操作,没有什么特别的难度。
官方操作文档:官方文档:https://docs.drone.io/
时间有限,教程可能有不全之处,大家可以自行部署之后,欢迎前来一同交流讨论这款超牛的神器,共同打造属于自己的CI/CD流水线。
【再见|再见 Jenkins !这款神器有点厉害!轻松搞定自动化部署】再见|再见 Jenkins !这款神器有点厉害!轻松搞定自动化部署
文章图片

    推荐阅读