做为一个开发,空闲时间经常学习些小项目,代码一推上去就完成了从代码的构建➡️推送镜像➡️部署,简直不要太赛博。
折腾过Jenkins,一直觉着太占内存了,配置复杂度也高,不适合放在我的小 NAS 中,经后端朋友的推荐了Drone CI,功能该有的有,配置简单,且只需要把配置文件放在项目下,并在 Drone CI 中简易配置后就可以执行构建了。
🐋 部署Drone CI
跟着 官方文档 配置结合自己的需求写 docker-compose
部署
yaml
复制成功
services:
drone:
image: drone/drone:2.24
container_name: drone
restart: always
ports:
- 2423:80
volumes:
- [drone volumn path]:/data/
environment:
- DRONE_SERVER_PROTO=[DRONE_SERVER_PROTO]
- DRONE_RPC_SECRET=[DRONE_RPC_SECRET]
- DRONE_SERVER_HOST=[DRONE_SERVER_HOST]
- DRONE_GITLAB_CLIENT_ID=[Client ID]
- DRONE_GITLAB_CLIENT_SECRET=[Client Secret]
- DRONE_GIT_ALWAYS_AUTH=true
- DRONE_GIT_USERNAME=[git username]
- DRONE_GIT_PASSWORD=[git password]
- DRONE_USER_CREATE=username:kwokronny,admin:true,token:rRj5XdqXDGRua9HTV6BS
networks:
gateway:
drone-runner:
image: drone/drone-runner-docker:1.8.3
container_name: drone-runner
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- [drone volumn path]/runner-env.conf:/etc/runner-env.conf
environment:
- DRONE_RPC_PROTO=[DRONE_SERVER_PROTO]
- DRONE_RPC_HOST=[DRONE_SERVER_HOST]
- DRONE_RPC_SECRET=[DRONE_RPC_SECRET]
- DRONE_RUNNER_CAPACITY=10
- DRONE_RUNNER_NAME=drone-runner
- DRONE_RUNNER_NETWORKS=gateway
- DRONE_RUNNER_ENV_FILE=/etc/runner-env.conf
networks:
gateway:
networks:
gateway:
external: true
需准备的变量
- git平台生成对应的client ID与Secret
- 通过密码生成工具生成一个 用于连接Drone Server与Runner的连接的共享密钥。
- 准备使用的Web域名或IP及是否使用SSL,可以是内网IP亦或是准备的域名
激活对应仓库的自动化
部署成功后访问对应入口后就可以通过 点击 Continue 平台通过当时在Git平台申请的应用使用 OAuth 的方式登陆了。
点击右上角的 SYNC 将网址同步你的GIT仓库列表。
进入想要构建的仓库,点击激活后,就可以在页面中配置相关的设置与密钥等。
奇葩点: ssh key文件密钥需要 Drone CLI 的方式上传
在Web UI
界面点击左下角头像,即可看到对应的 Personal Token
及 Drone CLI Example
shell
复制成功
export DRONE_SERVER=http://drone.example.com: [端口]
export DRONE_TOKEN=[Token]
drone secret add --name [密钥名] --data @/path/to/secret [仓库名]
Drone Plugin 是其最重要的一个生态
Drone 插件列表 一般 Docker 常用的drone 插件
- plugins/docker
- plugins/webhook
- appleboy/drone-scp
- appleboy/drone-ssh
使用Pipeline
项目已写好 Dockerfile,再根据需求在项目根目录写好 .drone.yml
即可完成该项目的持续化部署的流程建设啦
yaml
复制成功
kind: pipeline
type: docker #runner 类型
name: drone
trigger: # 触发机制:具体文档可查 <https://docs.drone.io/pipeline/triggers/>
branch: # 监测master分支的推送
- master
steps: #步骤
- name: build 构建镜像并推送到指定源
image: plugins/docker #应用 plugins/docker 插件 <https://plugins.drone.io/plugins/docker>
environment: # 可为镜像配置环境变量,如依赖加速等
http_proxy: http代理
https_proxy: http代理
settings:
registry: registry.cn-hangzhou.aliyuncs.com #推送至指定源
username: # 应用存储的密钥
from_secret: ALIYUN_DOCKER_USR
password: # 应用存储的密钥
from_secret: ALIYUN_DOCKER_PWD
auto_tag: true
# 指定镜像名
repo: registry.cn-hangzhou.aliyuncs.com/[命名空间]/[镜像名称]
tags:
- ${DRONE_BUILD_NUMBER}
- latest
# 完成后执行我的部署流程,因我的部署流程由drone的另一个项目管理,所以直接调用Drone的webhook调用即可
# drone API文档: <https://docs.drone.io/api/overview/>
- name: webhook
image: plugins/webhook
when:
status:
- success
settings:
urls: http://[drone-webhook]/api/repos/命名空间/部署项目/builds?branch=master&service=blog
headers:
- "Authorization=XXX"