Cloud Source Repositories 将关于您的代码库的消息发布到名为主题的指定资源上。订阅 Pub/Sub 主题的应用可以接收这些消息。例如,当您的代码库状态更改时,您会收到警报。另外,您可以为 Pub/Sub 主题配置角色和权限,以控制用户如何与代码库生成的 Pub/Sub 事件进行交互。
此页面概述了 Cloud Source Repositories 的 Pub/Sub 通知。要了解如何设置和使用 Pub/Sub 通知,请参阅 配置 Pub/Sub 通知。
范围
您可以配置 Cloud Source Repositories 以发布事件到 Pub/Sub 主题。您可以将此配置的范围设置为整个 Google Cloud 项目或单个代码库。
配置完成后,Cloud Source Repositories 使用您的服务账号将消息发布到指定的 Pub/Sub 主题。您必须首先授予服务账号发布该主题的权限。如果您为 Pub/Sub 启用了审核日志记录,则该服务账号将显示为 Pub/Sub API 的调用方。
权限
配置 Cloud Source Repositories 以发布消息需要执行以下操作:
- 监视事件的项目或代码库。如果指定了项目,则将监视该项目下的所有代码库。
- Cloud Source Repositories 将消息发布到的 Pub/Sub 主题。
- 用于访问 Pub/Sub 主题的服务账号。
- 消息格式(例如 JSON 或协议缓冲区)。
为 Pub/Sub 配置 Cloud Source Repositories 时,必须具有以下权限:
- 指定代码库上的
source.repos.updateRepo
或指定项目上的source.repos.updateProjectConfig
- 指定服务账号上的
iam.serviceAccounts.actAs
注册Pub/Sub 主题后,指定的服务账号必须具有 pubsub.topics.publish
权限才能发布消息。
事件类型
当用户创建代码库,删除代码库或将提交推送到代码库时,Pub/Sub 可以通知您。每个事件都是特定的事件类型。下表列出了类型及其相应的定义。
事件类型 | 说明 |
---|---|
CreateRepo | 用户创建代码库时发生的事件。 |
RefUpdate | 用户执行 git push 命令时发生的事件。 |
DeleteRepo | 用户删除代码库时发生的事件。 |
通知格式
您可以配置 Pub/Sub 以使用两种格式的通知之一:
- JSON
- Protocol Buffers
通知数据
每个 Pub/Sub 通知都包含以下事件信息:
字段名称 | 说明 |
---|---|
name | 代码库名称。 |
url | 代码库网址。 |
eventTime | 发生更改的时间。 |
refUpdateEvent | 具体更改的信息。 |
createRepoEvent | 指示用户是否创建了代码库 |
deleteRepoEvent | 指示用户是否删除了代码库 |
如果通知是针对 git push
命令的,则包含 refUpdateEvent
字段的通知将包含以下信息:
字段名称 | 说明 |
---|---|
进行更改的用户的电子邮件地址。 | |
refUpdates | 关于提交的信息。 |
refUpdates
字段包含有关 git push
命令的以下详细信息:
字段名称 | 说明 |
---|---|
refName | 分支名称。 |
updateType | 更新类型。有关详情,请参阅 更新类型。 |
oldId | 代码库前一提交的 ID。 |
newId | 代码库的新 ID。 |
更新类型
git push
事件可以具有四种更新类型之一。您可以在通知的 updateType
字段中找到类型。
更新类型 | 说明 |
---|---|
CREATE | 命令创建新引用时发生。 |
UPDATE_FAST_FORWARD | 命令更新对象时发生。 |
UPDATE_NON_FAST_FORWARD | 当命令使用 -f 标志(例如 git push -f )时发生。 |
删除 | 命令删除引用时发生。 |
通知示例
以下是 Pub/Sub 通知中包含的数据的示例。此通知使用 JSON 格式。
{
"name": "projects/test-project/repos/pubsub-test",
"url": "[URL_PATH]",
"eventTime": "2018-02-21T21:23:25.566175Z",
"refUpdateEvent": {
"email": "someone@somecompany.com",
"refUpdates": {
"refs/heads/master": {
"refName": "refs/heads/master",
"updateType": "UPDATE_FAST_FORWARD",
"oldId": "c7a28dd5de3403cc384a025834c9fce2886fe763",
"newId": "f00768887da8de62061210295914a0a8a2a38226"
}
}
}
}
跨项目设置示例
您可以配置 Cloud Source Repositories 以将消息发布到另一个项目中的主题。在这种情况下,您必须在代码库所在的同一项目中创建一个服务账号。在包含 Pub/Sub 主题的项目中,将角色 roles/pubsub.publisher
赋予该服务账号。当使用此账号和 Pub/Sub 主题配置 Cloud Source Repositories 时,代码库的事件消息将出现在另一个项目的主题中。