GitLab
当 SQL 变更通过 GitLab 进行版本化管理时,CloudDM 支持将 GitLab 作为 Git Ops 变更源。在使用 GitLab 作为变更源时,需要创建专用的发布账号并授予相应的 Project 访问权限,以便 CloudDM 获取变更内容。
CloudDM 支持私有部署的 GitLab,服务地址可以使用 HTTP 或 HTTPS,也支持非标准端口和子路径部署。建议生产环境使用 HTTPS。
如何配置
- 使用具有集成管理权限的账号登录 CloudDM。
- 使用发布账号登录 GitLab,在右上角头像菜单中进入 Edit profile。
- Access > Personal access tokens > Generate token > Legacy token,然后勾选
read_apiscope,Token 只显示一次,请及时保存。 - 进入 CloudDM 的 集成 > Git Ops,点击 新增。
- 选择 GitLab。
- 填写 名称 和 服务地址。服务地址应填写 GitLab 网页根地址,不要附加
/api/v4。例如:https://gitlab.example.comhttps://gitlab.example.com:8443/gitlab
- 填写 AccessToken。如果使用 HTTP 地址,需要确认明文传输 Token 的安全风险。
- 点击 测试 验证连接,验证通过后点击 添加。
配置 WebHook
为变更流配置 WebHook 时:
- 在 CloudDM 变更流详情页进入 配置项 > 触发配置 > WebHook,启用 WebHook,并复制 WebHook 地址和密码。
- 使用发布账号登录 GitLab,进入目标 Project。
- 在 Project 左侧菜单中进入 Settings > Webhooks,点击 Add new webhook。
- 将 CloudDM 生成的 WebHook 地址填写到 GitLab。
- 配置 WebHook 认证信息:
- GitLab 19.1 及以上版本推荐使用 Signing token。在 GitLab 生成 Signing token 后,将只显示一次的 Token 填写到 CloudDM 的 Signing Token。
- 其他版本可以将 CloudDM 显示的密码填写到 GitLab 的 Secret token。
- 根据变更流的触发方式选择事件:
- Push:选择 Push events,推送到目标分支时触发变更。
- Pull Request:选择 Merge request events,Merge Request 合并到目标分支后触发变更。
- 不要配置自定义 WebHook 模板。使用 HTTPS 时保持 Enable SSL verification 开启。
- 保存 GitLab WebHook,然后返回 CloudDM 保存触发配置。
- 在 GitLab WebHook 列表中使用 Test 发送测试请求,确认 CloudDM 可以正常接收事件。
使用子路径部署 GitLab 时,服务地址必须保留子路径。CloudDM 和 GitLab 还需要能够相互访问:CloudDM 需要调用 GitLab API,GitLab 需要访问 CloudDM 生成的 WebHook 地址。
WebHook 状态码说明
在 GitLab 中测试或查看 WebHook 投递记录时,可以根据 CloudDM 返回的 HTTP 状态码排查问题:
| 状态码 | 含义 | 处理方式 |
|---|---|---|
200 | CloudDM 已成功接收请求。事件与当前变更流不匹配或属于重复投递时,也会返回成功,但不会重复创建变更。 | 无需处理。需要确认是否创建变更时,可以检查目标分支、事件类型和变更记录。 |
400 | WebHook 请求无效。常见原因包括地址参数错误、请求体为空或格式错误、请求体过大、请求体不是有效的 UTF-8、Project 或分支与变更流不匹配,以及变更流配置校验失败。 | 重新复制 CloudDM 生成的 WebHook 地址,确认未使用自定义 WebHook 模板,并检查变更流中的 Project、目标分支和触发方式。 |
401 | WebHook 认证失败。Signing Token、Secret token、签名请求头或签名时间戳无效。 | 确认 GitLab 和 CloudDM 中配置的是同一个 Token。使用 Signing Token 时,应重新生成并立即复制完整 Token。 |
404 | WebHook 对应的变更流或 Git Ops 发布源不存在。 | 确认变更流和 Git Ops 配置没有被删除,然后从 CloudDM 重新复制 WebHook 地址。 |
500 | CloudDM 处理 WebHook 时发生内部错误。 | 查看 CloudDM Console 日志,修复异常后在 GitLab 中重新投递。 |
503 | CloudDM 暂时无法从 GitLab 获取 Merge Request 合并后的 Commit SHA。 | 检查 GitLab API、网络和 AccessToken 是否可用,恢复后重新投递。 |
更多配置说明请参考 GitLab Personal Access Tokens 和 GitLab Webhooks。
