使用 Harbor 事件触发器
目录
OverviewCore FeaturesSupported Event TypesBasic Event Information基础变量(所有事件通用)1. Push Artifact 事件Push Artifact 事件变量2. Pull Artifact 事件Pull Artifact 事件变量3. Delete Artifact 事件Delete Artifact 事件变量4. Scanning Completed 事件Scanning Completed 事件变量配置指南可选字段处理前置条件通过 Harbor UI 配置 WebhookPipeline 触发配置示例Use Cases用例 1:自动镜像部署用例 2:安全策略执行用例 3:Artifact 生命周期管理用例 4:多阶段 CI/CD 流水线Overview
Harbor Event Triggers 允许您通过 Harbor 的 Webhook 事件自动触发 Tekton pipeline。它支持多种事件类型,包括 artifact 推送、拉取、删除和扫描完成,帮助您构建完整的容器镜像和 OCI chart 的 CI/CD 自动化流程。
Core Features
- 多事件类型支持:支持 Harbor 的多种事件,如 Push Artifact、Pull Artifact、Delete Artifact 和 Scanning Completed。
- 标准化触发绑定:提供标准化的 ClusterTriggerBindings,确保跨平台一致性。
- 灵活的参数映射:自动从 Harbor 事件中提取关键信息作为 pipeline 参数。
- 多 artifact 类型支持:支持容器镜像和 OCI chart。
Supported Event Types
Basic Event Information
所有输出变量均可用于 pipeline 参数映射。您可以通过 $(tt.params.<param name>) 访问参数值。
基础变量(所有事件通用)
可选字段处理:artifact-tag 字段为可选字段,若 artifact 仅通过摘要引用,payload 中可能缺失该字段。repository-date-created 字段仅在 push 和 pull 事件中存在,delete 和 scanning 事件中不可用。
重要:如果 TriggerBinding 中引用的字段可能在 payload 中缺失,您必须在 TriggerTemplate 中为该参数设置 default 默认值。否则,当字段缺失时触发器会失败。例如,若 artifact-tag 可能缺失,请在 TriggerTemplate 的参数定义中添加 default: ""。
1. Push Artifact 事件
当 artifact(容器镜像或 OCI chart)被推送到 Harbor 仓库时触发。适用于:
- 自动镜像构建与部署
- 镜像验证与测试
- 自动打标签与版本管理
- 多阶段构建流水线
Push Artifact 事件变量
以上所有基础变量同样可用。
2. Pull Artifact 事件
当 artifact 从 Harbor 仓库被拉取时触发。适用于:
- 使用情况跟踪与分析
- 安全监控
- 资源消耗统计
- 部署验证
Pull Artifact 事件变量
以上所有基础变量同样可用。
3. Delete Artifact 事件
当 artifact 从 Harbor 仓库被删除时触发。适用于:
- 清理自动化
- 审计日志
- 资源管理
- 合规追踪
Delete Artifact 事件变量
以上所有基础变量均可用。注意 repository-date-created 在删除事件中不可用。
4. Scanning Completed 事件
当 artifact 的漏洞扫描完成时触发。适用于:
- 安全策略执行
- 自动安全检查
- 漏洞报告
- 自动修复流程
Scanning Completed 事件变量
以上所有基础变量均可用。注意 repository-date-created 在扫描事件中不可用。
scan_overview 字段结构根据扫描类型(SBOM、漏洞检查)不同而变化。结构中使用动态 MIME 类型键(如 application/vnd.security.vulnerability.report; version=1.1),无法直接用 TriggerBindings 中的 JSONPath 解析。如果需要提取详细扫描结果(如漏洞数量、扫描状态),建议使用 CEL 拦截器或为不同扫描类型创建单独的绑定。
更多事件结构详情,请参考 Harbor 官方 webhook 文档。
配置指南
可选字段处理
Harbor 事件中的某些字段可能因事件类型或 artifact 引用方式不同而可选或缺失。例如:
artifact-tag:若 artifact 仅通过摘要引用,可能缺失repository-date-created:仅在 push 和 pull 事件中存在,delete 和 scanning 事件中缺失
重要:使用引用可选字段的 ClusterTriggerBindings 时,您必须在 TriggerTemplate 中为对应参数提供默认值。若 payload 中缺失字段且无默认值,触发器会因 JSONPath 解析错误而失败。
示例:处理可选的 artifact-tag 字段,TriggerTemplate 配置示例如下:
这样当 Harbor 事件 payload 中缺失 tag 字段时,触发器会使用空字符串而非失败。
前置条件
- 已在环境中创建
EventListener,且能够处理目标命名空间中的Trigger。详情请联系平台管理员。 - Harbor 能访问上述
EventListener。 - 已创建所需的
Pipeline及相关运行配置。 - 您有权限修改 Harbor 项目的 Webhook 设置。
通过 Harbor UI 配置 Webhook
- 进入 Harbor 项目设置。
- 选择 Webhooks。
- 点击 New Webhook。
- 配置 webhook:
- 名称:填写描述性名称(如
tekton-webhook) - Endpoint URL:填写 EventListener 地址,例如:
或
- 认证头:(可选)如需认证则配置
- 跳过证书验证:使用自签名证书时启用
- 名称:填写描述性名称(如
- 根据需要选择事件类型:
- Push Artifact:artifact 推送时触发
- Pull Artifact:artifact 拉取时触发
- Delete Artifact:artifact 删除时触发
- Scanning Completed:漏洞扫描完成时触发
- 点击 保存。
Pipeline 触发配置示例
若目标是通过触发器实现持续集成,满足以下需求:
- 镜像推送时自动触发自动构建和部署
- 扫描完成时自动触发安全检查
事件类型过滤:若 Harbor webhook 配置发送多种事件类型(如 Push Artifact 和 Pull Artifact),您必须在 Trigger 中配置 CEL 拦截器按事件类型过滤。否则所有配置的事件类型都会触发同一 pipeline,可能导致意外执行。
例如,若 webhook 同时发送 PUSH_ARTIFACT 和 PULL_ARTIFACT 到同一 EventListener,且 Trigger 未配置拦截器,则两种事件都会触发 pipeline。请使用拦截器将不同事件路由到不同 Trigger 或 pipeline。
为简化说明,假设 pipeline 已准备好并提供以下参数:
请替换为您实际的 pipeline 信息。
接下来只需配置以下两个触发器:
创建 Push Artifact 触发器
将以下 YAML 保存为 harbor-push-trigger.yaml:
在环境中创建资源:
事件类型过滤示例:若 Harbor webhook 配置同时发送 Push 和 Pull 事件,且需分别处理,可创建多个 Trigger 并用 CEL 拦截器按事件类型过滤:
Push 事件触发器(如上所示):
Pull 事件触发器(如需要):
这样即使两种事件都发送到同一 EventListener,也能确保推送事件只触发推送 pipeline,拉取事件只触发拉取 pipeline。
创建 Scanning Completed 触发器
将以下 YAML 保存为 harbor-scanning-trigger.yaml:
请根据需要调整拦截器配置。您可以基于扫描状态、漏洞严重级别等进行过滤。注意 scan_overview 结构使用动态 MIME 类型键,需根据扫描类型调整 JSONPath 表达式。
在环境中创建资源:
验证触发器
通过向 Harbor 推送镜像并触发漏洞扫描进行验证。
CLI:
使用 kubectl -n <namespace> get pipelinerun 查看 pipeline 执行状态。
控制台:
访问 Pipelines > PipelineRuns 查看触发的 pipeline。
Use Cases
用例 1:自动镜像部署
场景:当容器镜像推送到 Harbor 时,自动部署到测试或生产环境。
配置:
- 使用
harbor-push-artifact绑定创建 Trigger - pipeline 配置拉取镜像(通过
artifact-resource-url)并部署到目标环境 - 可选使用 CEL 拦截器按仓库命名空间或标签模式过滤
示例用例:
- 部署标签为
production的镜像到生产环境 - 部署特定命名空间的镜像到测试环境
- 仅触发符合特定命名规则的镜像部署
用例 2:安全策略执行
场景:通过阻止含有关键漏洞的镜像部署,执行安全策略。
配置:
- 使用
harbor-scanning-completed绑定创建 Trigger - 使用 CEL 拦截器过滤含关键漏洞的扫描结果
- pipeline 配置:
- 检查扫描结果中的漏洞数量
- 若关键漏洞超阈值则阻止部署
- 向安全团队发送通知
示例用例:
- 阻止含关键漏洞的镜像部署
- 自动隔离高风险漏洞镜像
- 生成安全合规报告
用例 3:Artifact 生命周期管理
场景:基于使用情况和保留策略自动管理 artifact 生命周期。
配置:
- 为
harbor-pull-artifact和harbor-delete-artifact事件创建 Trigger - 跟踪 artifact 使用频率和存储时间
- 根据策略自动删除过期或未使用的 artifact
示例用例:
- 归档 90 天未被拉取的旧 artifact
- 部署完成后清理开发阶段的 artifact
- 符合数据保留合规要求
用例 4:多阶段 CI/CD 流水线
场景:构建完整的 CI/CD 流水线,基于镜像推送触发,执行测试、扫描,并根据扫描结果部署。
配置:
- 创建多个 Trigger:
harbor-push-artifact触发:启动构建和测试流水线harbor-scanning-completed触发:扫描通过后继续部署
- 使用 pipeline 依赖和工作空间共享阶段间的 artifact
示例用例:
- 构建 → 测试 → 扫描 → 部署 工作流
- 并行测试和扫描以加快反馈
- 基于测试和扫描结果的条件部署