使用 Harbor 事件触发器
目录
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
示例用例:
- 构建 → 测试 → 扫描 → 部署 工作流
- 并行测试和扫描以加快反馈
- 基于测试和扫描结果的条件部署