Gitlab 12.X - 从预接收挂钩中的存储路径获取项目 ID

Gitlab 12.X - Get project id from storage path in a pre-receive hook

对于遗留存储,当触发预接收挂钩时,很容易猜到涉及的存储库的 URL,因为路径是 "group/project-name.git"。

在 Gitlab 中使用新的哈希存储,如果项目 id 为 2,"pwd" 命令将 return 路径如 d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35.git。

=> 如何根据散列路径获取项目 ID?

我的目标是检查某人推送的所有提交是否都是由实际有权在该项目中编写的人编写的。如果我不知道涉及哪个项目,我就不能这样做。虽然我可以启动 "gitlab-rails console" 并使用 "ProjectRepository.find_by",但在挂钩上下文中使用该脚本是不切实际的。

有允许这样做的推送规则。但是,推送规则不是免费的,在 Gitlab CE 中不可用。

此外,从管理员的角度来看,能够根据存储库存储路径快速找到存储库的项目 ID 而不必启动 "gitlab-rails console" 非常重要。

有一个环境变量可用于 pre-receive 挂钩 - GL_REPOSITORY,其值类似于 project-123。这是项目 ID。