本文是来自于我在使用 Drone 过程中遇到一个问题的排查,然后延伸出来的一篇 Drone 源码分析,希望能对你有所帮助。
缘由
我增加 commit 信息为中文后提交推送到 gitlab 上,结果 Drone 任务没有触发执行
为什么没有自动触发构建呢?
难道是 Webhook 没有调用?遇到问题,肯定最好的方式是查看日志了。
|
|
从日志我们可以很明显的看到错误信息 meddler.Insert: DB error in Exec: Error 1366: Incorrect string value
,典型的是数据库字符集问题。
commit message 为中文时,无法插入到 MySQL 数据库,然后我去查看 MySQL 的数据库表:
|
|
发现 build_message
表的字符集是 latin1
。
源码分析
server.go
中调用 setupStore
:
|
|
|
|
|
|
|
|
|
|
从 migrations
表中查询到数据并存放到一个 map 中,然后用这个 map 来检查清单语句是否存在,也就是检查表是否已经存在,存在即跳出,继续 for 循环,否则执行 SQL 语句,然后将其插入 migrations
表中。
Drone 支持数据库:
- SQLite3
- MySQL
- PostgreSQL
思考
- 如果 Drone 业务逻辑调整,表结构要调整的话,这里的代码逻辑应该会遇到问题吧?(不兼容)
- Drone 使用原生的
database/sql
包,没有使用数据库插件/ORM;
参考资料
参考资料
茶歇驿站
一个可以让你停下来看一看,在茶歇之余给你帮助的小站,这里的内容主要是后端技术,个人管理,团队管理,以及其他个人杂想。