Loading... > **随着,云服务的崛起,越来越多的个人开发者对自己的研发支撑体系有高的标准,伴随着Jenkins的老气的模式,越来越多新生代高颜值高轻量的CICD平台出现!** ## **简介** ![Drone界面](https://image.juinjonn.com:8888/local/2023/01/13/63c10f8627ea2.png) **Drone作为新一代的CICD的平台,不仅高颜值,可与docker和k8s无缝衔接,且可配置目前主流git平台进行联动,实现git push打包部署,和界面一键部署各种语言的功能,下面本文就来介绍一下,如何使用docker来安装和部署Drone!** ## **步骤一 pull drone服务器镜像** **首先从dockerhub pull最新的drone镜像。** ``` docker pull drone/drone ``` **我们选择用latest标签的镜像即可,毕竟追新还是要有的!** ## **步骤二 启动drone服务器容器与参数配置** **在服务器或者本机,启动drone容器,我们以gitea来作为例子讲解** ``` docker run \ --volume=/root/docker/drone/data:/data \ --env=DRONE_GITEA_SERVER=https://gitea.company.com \ --env=DRONE_GITEA_CLIENT_ID=b4d751re-3232-free-9bg5-8139283d30fa87 \ --env=DRONE_GITEA_CLIENT_SECRET=6remH25rSq1iDsdffs9843z1P0KBrZdWHksfe3Tm \ --env=DRONE_RPC_SECRET=e8835da5f177d912b6afde7099ab54da \ --env=DRONE_SERVER_HOST=drone.company.com \ --env=DRONE_SERVER_PROTO=https \ --env=DRONE_USER_CREATE=username:juinjonn,admin:true \ --publish=30493:80 \ --publish=30494:443 \ --restart=always \ --detach=true \ --name=drone-app \ drone/drone ``` ### **参数详解** > **在docker参数配置中 : 冒号前面的为你自己服务器的数据 冒号后面的为docker容器的数据参数 root/docker/drone/data:/data中root/docker/drone/data为你自己服务器的路径映射到docker中/data的路径** ****volume 挂载目录容器路径**** ****DRONE_GITEA_SERVER 为你git服务器的url地址**** ****DRONE_GITEA_CLIENT_ID为你git中设置的OAuth2秘钥信息,对应下图中的客户端的ID**** ****DRONE_GITEA_CLIENT_SECRET对应下图中的客户端密钥**** ![创建oauth应用](https://image.juinjonn.com:8888/local/2023/01/13/63c10f83a10dd.png) ![获取id与秘钥](![](https://image.juinjonn.com:8888/local/2023/01/13/63c111bfecb5c.png) ****DRONE_RPC_SECRET 这个和drone runner交互用的密钥,最好使用openssl生成**** **打开终端输入** ``` ➜ ~ openssl rand -hex 16 e8835da5f177d912b6afde7099ab54da ``` **这样你就获得了RPC通讯的密钥,尽量不要自己想,将获得e8835da5f177d912b6afde7099ab54da作为DRONE_RPC_SECRET参数使用** ****DRONE_SERVER_HOST 当前drone服务器的域名或者ip:端口**** ****DRONE_SERVER_PROTO 对应的协议 https或者http,若是ip则写http**** ****DRONE_USER_CREATE 管理员用户名,建议填不然后面目录挂载会报权限不足错误**** ****publish 端口映射 你服务器或者本地的端口:容器端口**** ****--restart=always 自启动**** ****--detach=true后台运行****** ** ## **步骤三 启动目标机器runner** ### **drone runner介绍** **Drone runner是和drone服务器搭配的部署应用服务,drone服务器用来中央调配,而runner通过不断轮询drone服务器的请求,若发现drone服务器下达构建部署任务,runner则在你要部署的机器上执行任务。drone服务器是中央调控,而runner就是执行者,也就是说runner需要部署在你自己真正跑你自己应用的服务器。** **例如,drone服务器部署在A服务器上,那runner可以部署在B,C,D服务器上,这样当drone服务器下达部署命令时,B,C,D服务器则将你的应用进行部署,当然如果你只有一台服务器,那drone和runner都可以部署在上面。** ### **首先pull runner镜像** ``` docker pull drone/drone-runner-docker ``` ### **创建runner镜像** ``` docker run --detach \ --volume=/var/run/docker.sock:/var/run/docker.sock \ --env=DRONE_RPC_PROTO=https \ --env=DRONE_RPC_HOST=drone.company.com \ --env=DRONE_RPC_SECRET=e8835da5f177d912b6afde7099ab54da \ --env=DRONE_RUNNER_CAPACITY=2 \ --env=DRONE_RUNNER_NAME=pi-runner \ --env=DRONE_RUNNER_LABELS=name:centos-runner \ --publish=30495:3000 \ --restart=always \ --name=drone-runner-app \ drone/drone-runner-docker ``` ### **参数解析** ****volume 目录映射**** ****DRONE_RPC_PROTO 你的中央(Drone)服务器(上一步部署的镜像)的协议,如果是ip模式则写http**** ****DRONE_RPC_HOST drone服务器域名,也可以ip:端口**** ****DRONE_RPC_SECRET 上一步生成的通讯秘钥**** ****DRONE_RUNNER_CAPACITY 同时可执行的管道命令,既可同时部署的任务**** ****DRONE_RUNNER_NAME 当前runner名称**** ****DRONE_RUNNER_LABELS 用于区别不同的runner,可用来中央服务器指定runner执行任务用(下篇文章会讲到)**** ### **成功现象** **运行命令** ``` docker logs -f drone-runner-app ``` **看到如下日志,则表示成功** ``` time="2022-03-09T17:31:53Z" level=info msg="starting the server" addr=":3000" time="2022-03-09T17:31:53Z" level=info msg="successfully pinged the remote server" ``` ## **总结** **至此,你的drone cicd环境已经部署成功,后续文章会根据,**`python和java两种语言来讲解如何配置.drone.yml文件` ## 转载说明 **本文禁止私自转载,如需转载请联系原作者!否则必追究法律责任** 最后修改:2023 年 03 月 26 日 © 禁止转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏