专栏名称: 运维帮
互联网技术分享平台,分享的力量。帮主一直坚信技术可以改变世界,从毕业到现在干了15年运维,有许多话要和你说。
目录
51好读  ›  专栏  ›  运维帮

自动化实战:抛弃Jenkins!选择了这款轻量开源工具,真香!

运维帮  · 公众号  ·  · 2024-03-10 09:29

正文


背景



之前一直使用的是 Jenkins+Gitlab 作CI/CD, Jenkins是一款强大的持续集成/持续部署工具,广泛应用于软件开发和部署领域 。但是当今互联网逐渐走向容器化, Jenkins 的一些弊端也凸显了出来:

重量级: Jenkins 功能十分齐全,几乎可以做所有的事情。但是这也是他的一个弊端,过于重量级,有时候往往一个小的修改需要改动许多地方,升级\下载插件后需要进行重启等。

配置复杂 :Jenkins的配置相对比较复杂,尤其是在安装和配置插件时。有时候可能会遇到配置错误或兼容性问题,导致工具无法正常工作。

初学者学习困难: Jenkins是一款功能强大的工具,包含了大量的特性和插件。对于初学者来说,可能会觉得它的学习曲线比较陡峭,需要花费大量的时间和精力去学习和掌握。

所以,在当今容器化时代,选择一个合适的工具来做CICD是一个比较重点关注的事,那么本文说的这个工具就是——Drone。


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的账号体系和权限管理,无需注册用户、分配权限,大大简化了维护工作



Drone自动部署



前置条件:服务器得先安装好Docker(本文不讲述Docker的安装)

配置GitLab




在这里,使用Gitlab作为Drone的账号和权限管理,所以首先在你自己的Gitlab服务上面新增一个应用:


记录下此处的应用程序id及密码,后续安装Drone时会使用该ID

安装Drone



#创建共享密钥,用于drone服务和runner之间通信[root@master application]# openssl rand -hex 16b63a8848e42f3d96108e04a5fb99f41e#安装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:2Unable to find image 'drone/drone:2' locally2: Pulling from drone/drone79e9f2f55bf5: Pull complete 21e4c61aedb1: Pull complete fb8c70c372db: Pull complete 50712e01f221: Pull complete Digest: sha256:32c78ab006ff82cfe327088b763cf64e7435784fd1131284ebd5bcaf5ca5c43eStatus: Downloaded newer image for drone/drone:2314b72c95949247f6ebec71c5d089dee87ab541100576d0789af415e86cc5ab4

#安装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:1Unable to find image 'drone/drone-runner-docker:1' locally1: Pulling from drone/drone-runner-docker97518928ae5f: Pull complete 4af047b71fe6: Pull complete de9b7e52f3f6: Pull complete 679d1ec5770c: Pull complete Digest: sha256:70da970bb76a62567edbea1ac8002d9484664267f4cbb49fbd7c87a753d02260Status: Downloaded newer image for drone/drone-runner-docker:1d542e08d542678d37d9d588bb24d2916b575593c448a59c998631a1f25fc76b0
--env=DRONE_USER_CREATE=username:root,admin:true   这个必须要配置,标识Drone的管理员是哪个,不然drone项目激活后设置页面出现不了Trusted选项。会操作不了Drone的设置。安装好后首页如图:


点击继续,会跳转到gitlab页面赋权:

赋权后会出现你有权限的代码分支,选择一个激活,然后在设置页勾选Trust

做完设置以后,就可以到程序去配置Drone了


程序配置Drone




在程序的根路径新增.drone.yml文件

kind: pipelinename: 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

热文推荐






请到「今天看啥」查看全文