配置自定义邮件模板
目录
简介场景前提条件Send Mail 中的模板支持步骤1. 创建模板 ConfigMap2. 配置 pipeline 以使用你的模板3. 验证渲染结果常见问题我必须配置style.tekton.dev/descriptors 吗?我能在同一个模板中同时使用内置变量和 values.xxx 吗?如果未设置 renderTemplateName 会怎样?模板 ConfigMap 应该使用哪个命名空间?当渲染失败时,我应该首先检查什么?简介
本指南说明如何为 Send Mail Task 添加新的自定义邮件通知模板。
场景
对于大多数使用场景,建议先使用内置模板:
- 默认邮件模板:输出当前 PipelineRun 的基本信息。
- 自定义邮件模板:通过提供的模板选项支持自定义邮件内容。
如果内置模板不能满足你的需求,请按照本指南创建并配置一个新模板。
前提条件
- 集群中已提供
Send MailTask。 - 你具有在目标模板命名空间中创建
ConfigMap的权限。
Send Mail 中的模板支持
Send Mail Task 支持基于模板的 subject、body 和 contentType 渲染。
通过引用共享模板 ConfigMap,团队可以全局维护邮件内容,并在多个 pipeline 中复用同一模板。
有关渲染工作流、内置变量以及 renderTemplateValues 的详细信息,请参见 任务支持的模板参数。
步骤
1. 创建模板 ConfigMap
创建一个 ConfigMap,并按如下方式设置参数:
推荐命名空间:
- 尽可能将模板
ConfigMap放在kube-public中。kube-public是一个常用的共享命名空间,便于不同命名空间中的TaskRun资源复用同一模板。 - 如果你将模板存储在其他命名空间中,请在 Task/Pipeline 参数中显式将
renderTemplateNamespace设置为该命名空间。有关详细信息,请参见 任务支持的模板参数。
必需参数:
- 标签
tekton.alaudadevops.io/template-type: mail: 将此ConfigMap标记为邮件模板,以便 webhook 可以将其识别为Send Mail的渲染源。 - 数据键
subject.tpl、body.tpl、contentType.tpl: 使用 Go template(gotemplate)语法进行渲染,并映射到subject、body和contentType参数。 有关 gotemplate 语法,请参见 Gotext/template文档。 有关可用模板变量,请参见 任务支持的模板参数。
可选参数:
- 注解
tekton.alaudadevops.io/template-display-name: 在 UI 选择器和预览面板中显示的人类可读名称。 - 注解
style.tekton.dev/descriptors: 为 UI 中的renderTemplateValues定义嵌套表单,使用户可以通过表单控件填写模板变量,而不是手动编辑 YAML。有关 descriptor 语法和模式,请参见 如何配置动态表单。
示例:
2. 配置 pipeline 以使用你的模板
设置 renderTemplateName 和 renderTemplateNamespace,然后通过 renderTemplateValues 传递自定义值。
3. 验证渲染结果
检查经过变更的 TaskRun,并确认 subject、body 和 contentType 已追加到 spec.params 中。
如果渲染失败,请检查 TaskRun 注解 tekton.alaudadevops.io/template-render-error。
常见问题
我必须配置 style.tekton.dev/descriptors 吗?
不需要。它是可选的。仅当你希望为 renderTemplateValues 提供结构化 UI 表单时才进行配置。
我能在同一个模板中同时使用内置变量和 values.xxx 吗?
可以。你可以将内置变量(例如 .context.pipelineRun.name、.tasks.status)与用户值(例如 .values.extraMessage)组合使用。
如果未设置 renderTemplateName 会怎样?
模板渲染会被跳过。你需要手动提供 subject 和 body 参数。
模板 ConfigMap 应该使用哪个命名空间?
尽可能使用 kube-public。它是一个常见的共享命名空间,便于不同命名空间中的 TaskRun 资源复用同一模板。
如果模板 ConfigMap 存储在其他命名空间中,请将 renderTemplateNamespace 显式设置为该命名空间。有关参数详细信息,请参见 任务支持的模板参数。
当渲染失败时,我应该首先检查什么?
- 确认
renderTemplateName和renderTemplateNamespace指向一个已存在的模板ConfigMap。 - 确认该
ConfigMap包含标签tekton.alaudadevops.io/template-type: mail以及必需键subject.tpl、body.tpl和contentType.tpl。 - 检查 TaskRun 注解
tekton.alaudadevops.io/template-render-error以获取具体错误信息。