# DroneCI 使用说明
项目使用的 DroneCI 与 gitea 代码仓库紧密关联, 使用时需要使用 gitea 账号登陆 DroneCI 控制面板 (opens new window).
# 同步 gitea 仓库
新建的 gitea 仓库无法被 DroneCI 检测到, 需要执行一次同步
操作.
# 激活 DroneCI
完成同步的代码仓库可以通过搜索
添加.
点击 ACTIVATE
按钮进入激活页面
激活仓库后可完成相应配置, 如超时设置, 环境变量, 配置文件名称等.
这里需要勾选的有项目设置-受信任的
, 保存即可.
注意
添加信任功能只有管理员权限账户可以操作, 如果没有此选项, 请登录管理员账户操作
# 增加环境变量
DroneCI 的环境变量分为组织变量
和项目变量
两种, 其中项目变量
可以通过SETTINGS-Secrets-ADD A SECRET
增加, 且添加的环境变量只作用于当前项目.
# 项目环境变量
通常需要增加的项目环境变量有服务器根目录地址
, 通常命名为SERVER_PATH
, 对应的值形如root@81.71.18.142:/root/adv/html
, 用于指定静态 html 文件需要放置的服务器位置.
# 系统环境变量
系统环境变量可以通过 DroneCI CLI 或者直连数据库对orgsecrets
表进行新增, 需要注意的是插入值时需要转为 BLOB 格式. 最方便的方法是增加项目变量再复制过来.
常用的系统环境变量有OSS 节点, key_id, key_secret,
,云镜像仓库地址, 用户名, 密码
, 服务器私钥
等数据.
# 查看 CI 状态
点击对应仓库, 可以查看当前仓库执行的 CI 服务, 并通过颜色标记成功与否.
点击查看 CI 详情.
由于网络问题, docker volume 问题
导致失败的 CI 服务, 可以通过 RESTART 按钮重新执行.
# CI 常用配置
droneCI 默认使用代码仓库中的 .drone.yml
文件作为 CI 配置. 常用的 CI 服务按使用类型分前端, 后端, 安卓APP
三大类.
# 前端应用
流程
前端应用主要步骤为
安装依赖-打包-部署
三个流程, 对于管理后台页面, 部署流程需要增加上传 html 文件至服务器
步骤.环境
前端应用均使用
node:12
镜像作为基础环境.分支
对于部署流程, 通常按照不同
分支
上传至不同地址, 一般的, 使用develop
分支部署测试版本,master
分支部署正式版本.缓存
前端应用通常只需要对
node_modules
目录进行缓存, 需要按照项目对目录进行挂载.部署
部署流程使用
阿里云 OSS
完成静态文件的上传, CI 配置中需要包含对 oss 工具目录的挂载和检查, 需要注意的是上传目录的配置.html 文件
html 文件需要使用
scp
工具上传到指定服务器目录, 需要包含 ssh 的相关配置.配置参考
# 后端应用
流程
后端应用主要步骤为
安装依赖-打包-部署
三个流程环境
后端应用使用
maven
镜像作为依赖安装与打包环境, 使用docker:19.03.11
镜像作为镜像生成与部署环境.分支
对于部署流程, 通常按照不同
分支
上传至不同地址, 一般的, 使用develop
分支部署测试版本,master
分支部署正式版本.缓存
后端应用在打包过程中需要对 maven 依赖
.m2/repository/
, 生成的 jartarget/
等目录进行缓存, 部署过程需要挂载target/
jar 生成目录以及docker_sock
的运行环境目录.部署
部署流程使用
docker
完成后端程序镜像的上传, CI 配置中需要包含对 docker 私有镜像仓库的账号, 密码配置, 需要注意的是镜像的名称与版本号.配置参考
# 安卓 APP
安卓 APP 使用 gradle
进行 APK 生成, 通过系统变量注入签名信息, 上传至 OSS, 并提交版本信息至对应后端服务.
# FAQ
为什么代码目录有了 .drone.yml 文件还不能运行 CI/CD 服务?
检查是否在 DroneCI 控制面板激活了代码仓库, 新增的代码仓库 CI 不默认触发.
为什么会报
XXX: not found
,cannot find module XXX
的错误?缓存目录挂载有问题, 去 CI 服务器上删除对应的缓存目录 RESTART 一下就行.
为什么部署完成了但 OSS 目录还是空的?
- 检查
环境变量
是否配置正确 - 检查
上传路径
是否正确 - 检查
触发分支
与当前环境的publicPath
是否正确
- 检查
后端应用部署成功了, 为什么接口还没有更新?
后端应用无法自动更新镜像重启, 需要手动到 k8s 控制面板移除指定 pod 更新后端应用. 特别注意的是, 后端程序需要指定
imagePullPolicy: Always
, 否则不会强制更新最新的镜像.为什么有时候 CI 无法执行? 检查
gitea
代码仓库对应仓库设置-管理 Web 钩子
中钩子的状态, 如果出现红色警告, 则说明钩子不可用.需要在
drone
对应的项目中先DISABLE REPOSITORY(禁用)
再ACTIVATE REPOSITORY(激活)
代码仓库的 webhook.