# DroneCI 使用说明

项目使用的 DroneCI 与 gitea 代码仓库紧密关联, 使用时需要使用 gitea 账号登陆 DroneCI 控制面板 (opens new window).

# 同步 gitea 仓库

新建的 gitea 仓库无法被 DroneCI 检测到, 需要执行一次同步操作.

同步仓库

# 激活 DroneCI

完成同步的代码仓库可以通过搜索添加.

搜索仓库

点击 ACTIVATE 按钮进入激活页面

激活CI

激活仓库后可完成相应配置, 如超时设置, 环境变量, 配置文件名称等.

这里需要勾选的有项目设置-受信任的, 保存即可.

添加信任

注意

添加信任功能只有管理员权限账户可以操作, 如果没有此选项, 请登录管理员账户操作

# 增加环境变量

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 列表

点击查看 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 的相关配置.

  • 配置参考

    web 前端应用 CI 配置参考 (opens new window)

    管理后台 CI 配置参考 (opens new window)

# 后端应用

  • 流程

    后端应用主要步骤为安装依赖-打包-部署三个流程

  • 环境

    后端应用使用 maven 镜像作为依赖安装与打包环境, 使用 docker:19.03.11 镜像作为镜像生成与部署环境.

  • 分支

    对于部署流程, 通常按照不同分支上传至不同地址, 一般的, 使用 develop 分支部署测试版本, master 分支部署正式版本.

  • 缓存

    后端应用在打包过程中需要对 maven 依赖 .m2/repository/, 生成的 jar target/ 等目录进行缓存, 部署过程需要挂载 target/ jar 生成目录以及 docker_sock 的运行环境目录.

  • 部署

    部署流程使用 docker 完成后端程序镜像的上传, CI 配置中需要包含对 docker 私有镜像仓库的账号, 密码配置, 需要注意的是镜像的名称与版本号.

  • 配置参考

    后端应用 CI 配置参考 (opens new window)

# 安卓 APP

安卓 APP 使用 gradle 进行 APK 生成, 通过系统变量注入签名信息, 上传至 OSS, 并提交版本信息至对应后端服务.

配置参考 (opens new window)

# FAQ

  1. 为什么代码目录有了 .drone.yml 文件还不能运行 CI/CD 服务?

    检查是否在 DroneCI 控制面板激活了代码仓库, 新增的代码仓库 CI 不默认触发.

  2. 为什么会报 XXX: not found, cannot find module XXX 的错误?

    缓存目录挂载有问题, 去 CI 服务器上删除对应的缓存目录 RESTART 一下就行.

  3. 为什么部署完成了但 OSS 目录还是空的?

    • 检查环境变量是否配置正确
    • 检查上传路径是否正确
    • 检查触发分支与当前环境的publicPath是否正确
  4. 后端应用部署成功了, 为什么接口还没有更新?

    后端应用无法自动更新镜像重启, 需要手动到 k8s 控制面板移除指定 pod 更新后端应用. 特别注意的是, 后端程序需要指定 imagePullPolicy: Always, 否则不会强制更新最新的镜像.

  5. 为什么有时候 CI 无法执行? 检查 gitea 代码仓库对应仓库设置-管理 Web 钩子 中钩子的状态, 如果出现红色警告, 则说明钩子不可用.

    钩子失效

    需要在 drone 对应的项目中先DISABLE REPOSITORY(禁用)ACTIVATE REPOSITORY(激活)代码仓库的 webhook.

    重新激活

上次更新时间: 2021年8月23日 15:56