触发器(Webhook)

最近更新时间:2024-03-25 14:33:11

我的收藏

操作场景

腾讯云容器镜像服务(Tencent Container Registry,TCR)支持用户配置并使用灵活的触发器 (Webhook) 功能。可通过在实例内配置合适的触发器,快速接入现有研发流程及 CI/CD 平台,实现镜像更新自动触发应用部署等容器 DevOps 场景。
触发器功能允许用户自定义创建触发器规则,并支持查看触发日志。其中,触发动作同时支持容器镜像及 Helm Chart 的推送,拉取及删除操作。触发规则支持灵活的正则表达式过滤、指定实例内命名空间及通过配置镜像仓库和版本的正则过滤规则,实现仅部分仓库或特殊命名格式的镜像版本可启动触发器。自定义 Header 功能支持以 Key:Value 的形式配置访问目标 URL 时的 Header,可用于鉴权等场景。

前提条件

在创建并管理 TCR 企业版实例的触发器前,您需要完成以下准备工作:
已成功 购买 TCR 企业版实例。本功能仅适用于企业版实例。
如果使用子账号进行操作,请参考 企业版授权方案示例 提前为子账号授予对应实例的操作权限。

操作步骤

创建触发器

1. 登录 容器镜像服务 控制台,选择左侧导航栏中的 触发器。 在触发器页面即可查看当前实例内的触发器规则列表。如需切换实例,请在页面上方的实例下拉列表中进行选择。

2. 单击新建,在弹出的“新建触发器”窗口中,参考以下提示进行规则配置。如下图所示:


名称:实例规则名称,支持小写字母、数字及(-. _)三种符号,且需以字母数字开头。本文以 webhook-demo 为例。
描述:规则描述,支持中文。
触发动作:当前支持推送镜像、删除镜像,上传 Chart 及删除 Chart 四种触发动作。触发器执行时,发起的 webhook 请求内将包含该触发动作信息。
触发规则
触发实例:触发器所属的实例,即为当前已选择实例,不可修改。
命名空间:触发器生效的命名空间,如果列表为空,请先在该实例内 创建命名空间
仓库名称:触发器生效的仓库名称,支持对镜像仓库及 Helm Chart 仓库进行 正则匹配
版本Tag:触发器生效的 Tag,支持 正则匹配。如需所有版本均可触发,可不填写。
URL:触发器被触发后,发起请求的目标 URL,即用户配置的 Webhook Server 的访问地址。触发器将向该 URL 地址发起 POST 请求,请求 body 中将包含触发动作、触发规则等信息。
Header:触发器发起 POST 请求时,支持以 Key:Value 形式输入可携带的 Header 信息。例如,Authentication: xxxxxxx
3. 单击确定即可创建同步规则。

管理触发器规则

成功创建后即可在“触发器”页面查看已创建的触发器规则,您可执行以下操作管理触发器规则。如下图所示:

查看触发日志:单击触发器规则名称,或触发器规则名称右侧的触发日志即可查看该规则触发日志,详情请参见 查看触发器日志
修改规则状态

表示规则启用,

表示规则关闭。新建的实例同步规则默认为启用状态,您可自行调整。
配置:重新配置触发器规则,可配置全部参数。
删除:删除该触发器规则。

查看触发器日志

单击指定触发器规则名称,或触发器规则名称右侧的触发日志,即可查看该规则的触发日志。如下图所示:


包含信息如下:
任务ID:实例内唯一的触发器任务 ID。
触发动作:产生该次触发的触发动作,例如推送镜像。
触发仓库:产生该次触发动作的仓库资源。
状态:触发器执行 webhook 请求的成功状态 。
创建时间:该次触发的启动时间,即发起 webhook 请求的时间。

相关信息

Webhook 请求格式参考

当用户对符合规则的资源执行相应动作时,例如向指定镜像仓库推送新的镜像时,则相应触发器将被触发,并向规则中配置的 URL 发起 HTTP POST 请求,请求 Body 中包含的触发动作、仓库路径等信息。以下为推送镜像触发后并经解析的请求 Body 信息,可供开发 Webhook 服务端参考。
{
"type": "pushImage",
"occur_at": 1589106605,
"event_data": {
"resources": [
{
"digest": "sha256:89a42c3ba15f09a3fbe39856bddacdf9e94cd03df7403cad4fc105xxxx268fc9",
"tag": "v1.10.0",
"resource_url": "xxx-bj.tencentcloudcr.com/public/nginx:v1.10.0"
}
],
"repository": {
"date_created": 1587119137,
"name": "nginx",
"namespace": "public",
"repo_full_name": "public/nginx",
"repo_type": "public"
}
},
"operator": "332133xxxx"
}

使用正则表达式新建规则

正则匹配规则

以下是填写“仓库名称”和“版本Tag”时,其正则表达式支持的匹配规则:
*:匹配所有不包含路径分隔符(/)的任意长字符串。
**:匹配所有的任意长字符串,包括路径分隔符(/)。
注意
** 必须作为一段完整的相对路径,如果使用 /path**,其作用将等同于 /path*,仅能匹配以path为名称前缀的一级仓库。要想匹配path下的所有仓库,应使用 /path/**;要想匹配以path为名称前缀的所有仓库,则应使用 /path*/**
?:匹配除 ‘/’ 以外的任意单个字符。
{alt1, alt2, …}:同时匹配多个正则表达式。

典型场景

匹配选定命名空间内所有仓库
** 或者不填
匹配选定命名空间内以 path 为名称前缀的所有一级仓库
/path*
匹配选定命名空间内以 path1 和 path2 为名称前缀的所有一级仓库
/{path1, path2}*
匹配选定命名空间内 path1 和 path2 目录下的所有仓库
/{path1, path2}/**
匹配选定命名空间内以 path1 和 path2 为名称前缀的所有仓库
/{path1, path2}*/**
匹配选定仓库内所有 1.x 的版本Tag
1.?
匹配选定仓库内所有以 env1 和 env2 为名称前缀的版本 Tag
{env1*, env2*}