配置 Webhook 通知
如果您是项目管理员,您可以配置从 Harbor 中的项目到 webhook 端点的连接。如果您配置了 webhook,Harbor 会在项目中发生某些事件时通知 webhook 端点。Webhook 允许您将 Harbor 与其他工具集成,以简化持续集成和开发流程。
接收到来自 Harbor 项目的通知后采取的操作取决于您的持续集成和开发流程。例如,通过配置 Harbor 向您选择的端点上的 webhook 监听器发送 POST
请求,您可以在存储库中的镜像发生更改时触发应用程序的构建和部署。
支持的事件
您可以为每个项目定义多个 webhook 端点。Harbor 目前支持两种类型的端点:HTTP
和 SLACK
。Webhook 通知以 JSON 格式提供事件信息,并通过 HTTP
或 HTTPS POST
传递到您提供的现有 webhook 端点 URL 或 Slack 地址。Webhook 有 2 种支持的 JSON 格式有效负载,Default
是始终存在的格式,数据结构与以前的版本相比没有变化,只是它被命名为 CloudEvents
是按照 CloudEvents 规范组织有效负载数据的格式。下表描述了触发通知的事件以及每个通知的内容。
事件 | Webhook 事件类型 | 通知内容 |
---|---|---|
推送构件到仓库 | PUSH_ARTIFACT |
仓库命名空间名称、仓库名称、资源 URL、标签、清单摘要、构件名称、推送时间时间戳、推送构件的用户名 |
从仓库拉取构件 | PULL_ARTIFACT |
仓库命名空间名称、仓库名称、清单摘要、构件名称、拉取时间时间戳、拉取构件的用户名 |
从仓库删除构件 | DELETE_ARTIFACT |
仓库命名空间名称、仓库名称、清单摘要、构件名称、构件大小、删除时间时间戳、删除镜像的用户名 |
构件扫描完成 | SCANNING_COMPLETED |
仓库命名空间名称、仓库名称、扫描的标签、构件名称、严重问题数量、主要问题数量、次要问题数量、上次扫描状态、扫描完成时间时间戳、执行扫描的用户名 |
构件扫描停止 | SCANNING_STOPPED |
仓库命名空间名称、仓库名称、扫描的标签、构件名称、扫描状态 |
构件扫描失败 | SCANNING_FAILED |
仓库命名空间名称、仓库名称、扫描的标签、构件名称、发生的错误、执行扫描的用户名 |
项目配额超出 | QUOTA_EXCEED |
仓库命名空间名称、仓库名称、标签、清单摘要、构件名称、推送时间时间戳、推送构件的用户名 |
项目配额接近阈值 | QUOTA_WARNING |
仓库命名空间名称、仓库名称、标签、清单摘要、构件名称、推送时间时间戳、推送构件的用户名 |
构件复制状态已更改 | REPLICATION |
仓库命名空间名称、仓库名称、标签、清单摘要、构件名称、推送时间时间戳、触发复制的用户名 |
构件标签保留已完成 | TAG_RETENTION |
仓库命名空间名称、仓库名称、总数和保留数、保留规则、已删除构件结果 |
有效负载格式
Webhook 通知以 JSON 格式传递。以下示例显示了使用 HTTP
类型端点时不同事件类型的 JSON 通知
构件推送
默认
{
"type": "PUSH_ARTIFACT",
"occur_at": 1680501893,
"operator": "harbor-jobservice",
"event_data": {
"resources": [
{
"digest": "sha256:954b378c375d852eb3c63ab88978f640b4348b01c1b3456a024a81536dafbbf4",
"tag": "sha256:954b378c375d852eb3c63ab88978f640b4348b01c1b3456a024a81536dafbbf4",
"resource_url": "localhost/harbor/alpine@sha256:954b378c375d852eb3c63ab88978f640b4348b01c1b3456a024a81536dafbbf4"
}
],
"repository": {
"date_created": 1680501893,
"name": "alpine",
"namespace": "harbor",
"repo_full_name": "harbor/alpine",
"repo_type": "private"
}
}
}
CloudEvents
{
"specversion": "1.0",
// id is a generated UUID to make sure the unique
"id": "66e18103-09c1-41f6-982f-37df223f3eeb",
// requestid is the http request id for tracing the source request of this event
"requestid": "51c0b694-0168-4f3c-b0db-282565455d7b",
"source": "/projects/2/webhook/policies/15",
"type": "harbor.artifact.pushed",
"datacontenttype": "application/json",
"time": "2023-04-03T06:04:46Z",
"data": {
"resources": [
{
"digest": "sha256:954b378c375d852eb3c63ab88978f640b4348b01c1b3456a024a81536dafbbf4",
"tag": "sha256:954b378c375d852eb3c63ab88978f640b4348b01c1b3456a024a81536dafbbf4",
"resource_url": "localhost/harbor/alpine@sha256:954b378c375d852eb3c63ab88978f640b4348b01c1b3456a024a81536dafbbf4"
}
],
"repository": {
"date_created": 1680501893,
"name": "alpine",
"namespace": "harbor",
"repo_full_name": "harbor/alpine",
"repo_type": "private"
}
},
"operator": "harbor-jobservice"
}
构件拉取
默认
{
"type": "PULL_ARTIFACT",
"occur_at": 1680502372,
"operator": "robot$harbor+wHSYCuGD-Trivy-8e2e7505-d1e6-11ed-9e71-0242ac130009",
"event_data": {
"resources": [
{
"digest": "sha256:954b378c375d852eb3c63ab88978f640b4348b01c1b3456a024a81536dafbbf4",
"tag": "sha256:954b378c375d852eb3c63ab88978f640b4348b01c1b3456a024a81536dafbbf4",
"resource_url": "localhost/harbor/alpine@sha256:954b378c375d852eb3c63ab88978f640b4348b01c1b3456a024a81536dafbbf4"
}
],
"repository": {
"date_created": 1680501893,
"name": "alpine",
"namespace": "harbor",
"repo_full_name": "harbor/alpine",
"repo_type": "private"
}
}
}
CloudEvents
{
"specversion": "1.0",
"id": "718eab63-2efa-4f88-8c27-8bcacc34929b",
"requestid": "bb4b5b91-aac7-4acd-8dff-e4118e53f6d1"
"source": "/projects/2/webhook/policies/15",
"type": "harbor.artifact.pulled",
"datacontenttype": "application/json",
"time": "2023-04-03T06:12:52Z",
"data": {
"resources": [
{
"digest": "sha256:954b378c375d852eb3c63ab88978f640b4348b01c1b3456a024a81536dafbbf4",
"tag": "sha256:954b378c375d852eb3c63ab88978f640b4348b01c1b3456a024a81536dafbbf4",
"resource_url": "localhost/harbor/alpine@sha256:954b378c375d852eb3c63ab88978f640b4348b01c1b3456a024a81536dafbbf4"
}
],
"repository": {
"date_created": 1680501893,
"name": "alpine",
"namespace": "harbor",
"repo_full_name": "harbor/alpine",
"repo_type": "private"
}
},
"operator": "robot$harbor+wHSYCuGD-Trivy-8e2e7505-d1e6-11ed-9e71-0242ac130009"
}
构件删除
默认
{
"type": "DELETE_ARTIFACT",
"occur_at": 1680502598,
"operator": "harbor-jobservice",
"event_data": {
"resources": [
{
"digest": "sha256:2bb501e6173d9d006e56de5bce2720eb06396803300fe1687b58a7ff32bf4c14",
"tag": "3.8",
"resource_url": "localhost/harbor/alpine:3.8"
}
],
"repository": {
"date_created": 1680501893,
"name": "alpine",
"namespace": "harbor",
"repo_full_name": "harbor/alpine",
"repo_type": "private"
}
}
}
CloudEvents
{
"specversion": "1.0",
"id": "343f1623-7cba-487c-88f1-c5ebf55e93aa",
"requestid": "ca0f3ceb-810f-4598-a268-a2291ad4de49",
"source": "/projects/2/webhook/policies/15",
"type": "harbor.artifact.deleted",
"datacontenttype": "application/json",
"time": "2023-04-03T06:16:38Z",
"data": {
"resources": [
{
"digest": "sha256:2bb501e6173d9d006e56de5bce2720eb06396803300fe1687b58a7ff32bf4c14",
"tag": "3.8",
"resource_url": "localhost/harbor/alpine:3.8"
}
],
"repository": {
"date_created": 1680501893,
"name": "alpine",
"namespace": "harbor",
"repo_full_name": "harbor/alpine",
"repo_type": "private"
}
},
"operator": "harbor-jobservice"
}
扫描完成
默认
{
"type": "SCANNING_COMPLETED",
"occur_at": 1680502375,
"operator": "auto",
"event_data": {
"resources": [
{
"digest": "sha256:954b378c375d852eb3c63ab88978f640b4348b01c1b3456a024a81536dafbbf4",
"resource_url": "localhost/harbor/alpine@sha256:954b378c375d852eb3c63ab88978f640b4348b01c1b3456a024a81536dafbbf4",
"scan_overview": {
"application/vnd.security.vulnerability.report; version=1.1": {
"report_id": "af0546c1-67dc-4e9d-927e-372900ead0df",
"scan_status": "Success",
"severity": "None",
"duration": 8,
"summary": {
"total": 0,
"fixable": 0,
"summary": {}
},
"start_time": "2023-04-03T06:12:47Z",
"end_time": "2023-04-03T06:12:55Z",
"scanner": {
"name": "Trivy",
"vendor": "Aqua Security",
"version": "v0.37.2"
},
"complete_percent": 100
}
}
}
],
"repository": {
"name": "alpine",
"namespace": "harbor",
"repo_full_name": "harbor/alpine",
"repo_type": "private"
}
}
}
CloudEvents
{
"specversion": "1.0",
"id": "64bce2fe-6159-454d-8389-852d01ef1e9d",
"requestid": "98ecbced-4169-443b-8e19-459a8c81675d",
"source": "/projects/2/webhook/policies/15",
"type": "harbor.scan.completed",
"datacontenttype": "application/json",
"time": "2023-04-03T06:12:55Z",
"data": {
"resources": [
{
"digest": "sha256:954b378c375d852eb3c63ab88978f640b4348b01c1b3456a024a81536dafbbf4",
"resource_url": "localhost/harbor/alpine@sha256:954b378c375d852eb3c63ab88978f640b4348b01c1b3456a024a81536dafbbf4",
"scan_overview": {
"application/vnd.security.vulnerability.report; version=1.1": {
"report_id": "af0546c1-67dc-4e9d-927e-372900ead0df",
"scan_status": "Success",
"severity": "None",
"duration": 8,
"summary": {
"total": 0,
"fixable": 0,
"summary": {}
},
"start_time": "2023-04-03T06:12:47Z",
"end_time": "2023-04-03T06:12:55Z",
"scanner": {
"name": "Trivy",
"vendor": "Aqua Security",
"version": "v0.37.2"
},
"complete_percent": 100
}
}
}
],
"repository": {
"name": "alpine",
"namespace": "harbor",
"repo_full_name": "harbor/alpine",
"repo_type": "private"
}
},
"operator": "auto"
}
扫描停止
默认
{
"type": "SCANNING_STOPPED",
"occur_at": 1680502334,
"operator": "auto",
"event_data": {
"resources": [
{
"digest": "sha256:e802987f152d7826cf929ad4999fb3bb956ce7a30966aeb46c749f9120eaf22c",
"resource_url": "localhost/harbor/alpine@sha256:e802987f152d7826cf929ad4999fb3bb956ce7a30966aeb46c749f9120eaf22c",
"scan_overview": {
"application/vnd.security.vulnerability.report; version=1.1": {
"report_id": "bf92700b-fa5e-4fe4-891c-42b730c81151",
"scan_status": "Stopped",
"severity": "",
"duration": 5,
"summary": null,
"start_time": "2023-04-03T06:12:09Z",
"end_time": "2023-04-03T06:12:14Z",
"complete_percent": 0
}
}
}
],
"repository": {
"name": "alpine",
"namespace": "harbor",
"repo_full_name": "harbor/alpine",
"repo_type": "private"
}
}
}
CloudEvents
{
"specversion": "1.0",
"id": "a8a03301-9e31-433f-ace3-240ac16f17b7",
"requestid": "daea2f4d-7a08-400d-9eef-e5f726da976e",
"source": "/projects/2/webhook/policies/15",
"type": "harbor.scan.stopped",
"datacontenttype": "application/json",
"time": "2023-04-03T06:12:14Z",
"data": {
"resources": [
{
"digest": "sha256:e802987f152d7826cf929ad4999fb3bb956ce7a30966aeb46c749f9120eaf22c",
"resource_url": "localhost/harbor/alpine@sha256:e802987f152d7826cf929ad4999fb3bb956ce7a30966aeb46c749f9120eaf22c",
"scan_overview": {
"application/vnd.security.vulnerability.report; version=1.1": {
"report_id": "bf92700b-fa5e-4fe4-891c-42b730c81151",
"scan_status": "Stopped",
"severity": "",
"duration": 5,
"summary": null,
"start_time": "2023-04-03T06:12:09Z",
"end_time": "2023-04-03T06:12:14Z",
"complete_percent": 0
}
}
}
],
"repository": {
"name": "alpine",
"namespace": "harbor",
"repo_full_name": "harbor/alpine",
"repo_type": "private"
}
},
"operator": "auto"
}
扫描失败
默认
{
"type": "SCANNING_FAILED",
"occur_at": 1680505885,
"operator": "auto",
"event_data": {
"resources": [
{
"digest": "sha256:dabea2944dcc2b86482b4f0b0fb62da80e0673e900c46c0e03b45919881a5d84",
"resource_url": "localhost/harbor/alpine@sha256:dabea2944dcc2b86482b4f0b0fb62da80e0673e900c46c0e03b45919881a5d84",
"scan_overview": {
"application/vnd.security.vulnerability.report; version=1.1": {
"report_id": "a2573415-c727-4723-bc92-376c1d978637",
"scan_status": "Error",
"severity": "",
"duration": 10,
"summary": null,
"start_time": "2023-04-03T07:11:15Z",
"end_time": "2023-04-03T07:11:25Z",
"complete_percent": 0
}
}
}
],
"repository": {
"name": "alpine",
"namespace": "harbor",
"repo_full_name": "harbor/alpine",
"repo_type": "private"
}
}
}
CloudEvents
{
"specversion": "1.0",
"id": "bdfe1de3-c069-4efc-b4f4-1a75c9a148c4",
"requestid": "b28412fe-7934-42c8-9633-4d22d872d718",
"source": "/projects/2/webhook/policies/15",
"type": "harbor.scan.failed",
"datacontenttype": "application/json",
"time": "2023-04-03T07:11:25Z",
"data": {
"resources": [
{
"digest": "sha256:dabea2944dcc2b86482b4f0b0fb62da80e0673e900c46c0e03b45919881a5d84",
"resource_url": "localhost/harbor/alpine@sha256:dabea2944dcc2b86482b4f0b0fb62da80e0673e900c46c0e03b45919881a5d84",
"scan_overview": {
"application/vnd.security.vulnerability.report; version=1.1": {
"report_id": "a2573415-c727-4723-bc92-376c1d978637",
"scan_status": "Error",
"severity": "",
"duration": 10,
"summary": null,
"start_time": "2023-04-03T07:11:15Z",
"end_time": "2023-04-03T07:11:25Z",
"complete_percent": 0
}
}
}
],
"repository": {
"name": "alpine",
"namespace": "harbor",
"repo_full_name": "harbor/alpine",
"repo_type": "private"
}
},
"operator": "auto"
}
配额超出
默认
{
"type": "QUOTA_EXCEED",
"occur_at": 1680505484,
"operator": "",
"event_data": {
"resources": [
{
"digest": "sha256:402d21757a03a114d273bbe372fa4b9eca567e8b6c332fa7ebf982b902207242"
}
],
"repository": {
"name": "alpine",
"namespace": "harbor",
"repo_full_name": "harbor/alpine",
"repo_type": "private"
},
"custom_attributes": {
"Details": "adding 2.1 MiB of storage resource, which when updated to current usage of 8.3 MiB will exceed the configured upper limit of 10.0 MiB."
}
}
}
CloudEvents
{
"specversion": "1.0",
"id": "81f243ce-699c-44d6-9dbe-b2ee5f10237a",
"requestid": "4b9dcf9a-db23-460c-9b52-c9d994e362ee",
"source": "/projects/2/webhook/policies/15",
"type": "harbor.quota.exceeded",
"datacontenttype": "application/json",
"time": "2023-04-03T07:04:44Z",
"data": {
"resources": [
{
"digest": "sha256:402d21757a03a114d273bbe372fa4b9eca567e8b6c332fa7ebf982b902207242"
}
],
"repository": {
"name": "alpine",
"namespace": "harbor",
"repo_full_name": "harbor/alpine",
"repo_type": "private"
},
"custom_attributes": {
"Details": "adding 2.1 MiB of storage resource, which when updated to current usage of 8.3 MiB will exceed the configured upper limit of 10.0 MiB."
}
},
"operator": ""
}
配额接近阈值
默认
{
"type": "QUOTA_WARNING",
"occur_at": 1680505653,
"operator": "",
"event_data": {
"resources": [
{
"digest": "sha256:514ec80ffbe1a2ab1d9a3d5e6082296296a1d8b6870246edf897228e5df2367d"
}
],
"repository": {
"name": "alpine",
"namespace": "harbor",
"repo_full_name": "harbor/alpine",
"repo_type": "private"
},
"custom_attributes": {
"Details": "quota usage reach 85%: resource storage used 12.6 MiB of 14.0 MiB"
}
}
}
CloudEvents
{
"specversion": "1.0",
"id": "1267b437-ea5a-4e06-bbe5-75e6fde733d3",
"requestid": "77eb6c26-f3e9-45d3-bd40-2fd9421c56cd",
"source": "/projects/2/webhook/policies/15",
"type": "harbor.quota.warned",
"datacontenttype": "application/json",
"time": "2023-04-03T07:07:33Z",
"data": {
"resources": [
{
"digest": "sha256:514ec80ffbe1a2ab1d9a3d5e6082296296a1d8b6870246edf897228e5df2367d"
}
],
"repository": {
"name": "alpine",
"namespace": "harbor",
"repo_full_name": "harbor/alpine",
"repo_type": "private"
},
"custom_attributes": {
"Details": "quota usage reach 85%: resource storage used 12.6 MiB of 14.0 MiB"
}
},
"operator": ""
}
复制状态已更改
默认
{
"type": "REPLICATION",
"occur_at": 1680501904,
"operator": "MANUAL",
"event_data": {
"replication": {
"harbor_hostname": "localhost",
"job_status": "Success",
"artifact_type": "image",
"override_mode": true,
"trigger_type": "MANUAL",
"policy_creator": "admin",
"execution_timestamp": 1680501881,
"src_resource": {
"registry_name": "hub",
"registry_type": "docker-hub",
"endpoint": "https://hub.docker.com",
"namespace": "library"
},
"dest_resource": {
"registry_type": "harbor",
"endpoint": "http://localhost",
"namespace": "harbor"
},
"successful_artifact": [
{
"type": "image",
"status": "Success",
"name_tag": "alpine [1 item(s) in total]"
}
]
}
}
}
CloudEvents
{
"specversion": "1.0",
"id": "e3005250-ffa8-4a10-af92-91fe25cca22c",
"requestid": "0d896c4d-353a-422e-b43b-5067d98ec2a3",
"source": "/projects/2/webhook/policies/15",
"type": "harbor.replication.status.changed",
"datacontenttype": "application/json",
"time": "2023-04-03T06:05:04Z",
"data": {
"replication": {
"harbor_hostname": "localhost",
"job_status": "Success",
"artifact_type": "image",
"override_mode": true,
"trigger_type": "MANUAL",
"policy_creator": "admin",
"execution_timestamp": 1680501881,
"src_resource": {
"registry_name": "hub",
"registry_type": "docker-hub",
"endpoint": "https://hub.docker.com",
"namespace": "library"
},
"dest_resource": {
"registry_type": "harbor",
"endpoint": "http://localhost",
"namespace": "harbor"
},
"successful_artifact": [
{
"type": "image",
"status": "Success",
"name_tag": "alpine [1 item(s) in total]"
}
]
}
},
"operator": "MANUAL"
}
标签保留已完成
默认
{
"type": "TAG_RETENTION",
"occur_at": 1680502598,
"operator": "MANUAL",
"event_data": {
"retention": {
"total": 1,
"retained": 0,
"harbor_hostname": "localhost",
"project_name": "harbor",
"retention_policy_id": 2,
"retention_rule": [
{
"template": "always",
"tag_selectors": [
{
"kind": "doublestar",
"decoration": "matches",
"pattern": "xxxxxxxxxx",
"extras": "{\"untagged\":true}"
}
],
"scope_selectors": {
"repository": [
{
"kind": "doublestar",
"decoration": "repoMatches",
"pattern": "**",
"extras": ""
}
]
}
}
],
"result": "SUCCESS",
"deleted_artifact": [
{
"type": "image",
"status": "SUCCESS",
"name_tag": "alpine:3.8"
}
]
}
}
}
CloudEvents
{
"specversion": "1.0",
"id": "a8618595-6fa0-4cf4-afdc-870459b1d7f6",
"requestid": "d71943e8-872d-40cd-b12a-f6bafcce1202",
"source": "/projects/2/webhook/policies/15",
"type": "harbor.tag_retention.finished",
"datacontenttype": "application/json",
"time": "2023-04-03T06:16:38Z",
"data": {
"retention": {
"total": 1,
"retained": 0,
"harbor_hostname": "localhost",
"project_name": "harbor",
"retention_policy_id": 2,
"retention_rule": [
{
"template": "always",
"tag_selectors": [
{
"kind": "doublestar",
"decoration": "matches",
"pattern": "xxxxxxxxxx",
"extras": "{\"untagged\":true}"
}
],
"scope_selectors": {
"repository": [
{
"kind": "doublestar",
"decoration": "repoMatches",
"pattern": "**",
"extras": ""
}
]
}
}
],
"result": "SUCCESS",
"deleted_artifact": [
{
"type": "image",
"status": "SUCCESS",
"name_tag": "alpine:3.8"
}
]
}
},
"operator": "MANUAL"
}
请注意,只有 http 类型端点支持选择 Default
或 CloudEvents
格式,当您选择 Slack 类型并填写 Slack incoming webhook URL 作为端点时,您在 Slack 中收到的消息将是如下所示的富文本。
Harbor webhook events
event_type: PUSH_ARTIFACT
occur_at: April 15th at 11:59 AM
operator: admin
event_data:
{
"resources": [
{
"digest": "sha256:8a9e9863dbb6e10edb5adfe917c00da84e1700fa76e7ed02476aa6e6fb8ee0d8",
"tag": "latest",
"resource_url": "hub.harbor.com/test-webhook/debian:latest"
}
],
"repository": {
"date_created": 1586922308,
"name": "debian",
"namespace": "test-webhook",
"repo_full_name": "test-webhook/debian",
"repo_type": "private"
}
}
Webhook 端点建议
有两种类型的端点。对于 HTTP
,接收 webhook 的端点理想情况下应具有 webhook 监听器,该监听器能够解释有效负载并根据其中包含的信息采取行动。例如,运行 shell 脚本。
对于 Slack 端点,您应该遵循 Slack incoming webhook 指南。
用例示例
您可以配置您的持续集成和开发基础设施,使其在收到来自 Harbor 的 webhook 通知时执行以下类型的操作。
- 构件推送
- 在选定的仓库或标签上推送后立即触发新的构建。
- 通知使用该构件的服务或应用程序,新构件可用并拉取它。
- 使用 Trivy 扫描构件。
- 将构件复制到远程仓库。
- 镜像扫描
- 如果发现漏洞,重新扫描镜像或将其复制到另一个仓库。
- 如果扫描通过,则部署镜像。
配置 Webhook
-
使用至少具有项目管理员权限的帐户登录 Harbor 界面。
-
转到 项目,选择一个项目,然后选择 Webhook。
-
选择通知类型
HTTP
,以便 webhook 将发送到 HTTP 端点。 -
当选择
HTTP
通知类型时,选择有效负载格式为Default
或CloudEvents
。 -
选择您要订阅的事件。
-
输入您的 webhook 端点监听器的 URL。
-
如果您的 webhook 监听器实现了身份验证,请输入身份验证标头。
-
要实现
HTTPS POST
而不是HTTP POST
,请选中 验证远程证书 复选框。 -
单击 添加 以创建 webhook。
您可以修改 webhook,也可以 启用
或 停用
webhook。
Webhook 作业历史记录
-
单击一个 webhook 策略的单选框,然后在以下部分中列出最近的 webhook 执行。
-
选择一个 webhook 执行,然后将重定向到此执行下的任务页面。
-
单击一个任务的日志按钮,然后将重定向到页面以显示 webhook 作业日志。
如果 webhook 通知发送失败,或者如果收到 HTTP 错误响应,且代码不是 2xx
,则会根据您在 harbor.yml
中设置的配置重新发送通知。
Docker Compose
notification:
# Maximum retry count for webhook job
# Increase or decrease the retry count when webhook job failed, pay attention that a high number of retries can put pressure on the webhook job queue
webhook_job_max_retry: 3
# HTTP client timeout for webhook job
# Increase the timeout if the webhook endpoint cannot respond to harbor within the specified timeout
webhook_job_http_client_timeout: 3 #seconds
Helm
jobservice:
notification:
# Maximum retry count for webhook job
# Increase or decrease the retry count when webhook job failed, pay attention that a high number of retries can put pressure on the webhook job queue
webhook_job_max_retry: 3
# HTTP client timeout for webhook job
# Increase the timeout if the webhook endpoint cannot respond to harbor within the specified timeout
webhook_job_http_client_timeout: 3 # in seconds
全局启用和停用 Webhook
作为 Harbor 系统管理员,您可以为所有项目启用和停用 webhook 通知。
-
转到 配置 > 系统设置。
-
向下滚动并选中或取消选中 启用 Webhook 复选框。
在本页
贡献