Advanced Repository Configuration
本指南适用于需要高级 Repository CR 配置的普通用户,例如并发限制、源分支设置和自定义参数扩展。
本指南介绍 Repository Custom Resources 的高级配置选项,包括:
- 全局 Repository CR 用于自动配置继承(技术预览)
- 并发限制
- 源分支配置
- 自定义参数扩展
目录
前提条件创建全局 Repository CR示例:全局 Repository CR示例:使用全局设置设置并发限制配置并发限制示例用例验证并发限制更改流水线定义的源分支配置 PipelineRun 定义来源安全性优势配置对比自定义参数扩展定义自定义参数在流水线中使用自定义参数参数优先级示例:环境特定配置组合高级功能最佳实践1. 并发限制2. 源分支配置3. 自定义参数故障排查并发限制不起作用参数未展开后续步骤前提条件
- 已部署并运行 PAC 组件
- 已创建 Repository CR(参见 Configure Repository)
- 具有集群管理员或命名空间级权限
创建全局 Repository CR
全局 Repository CR 功能为技术预览功能,提供所有 Repository CR 的自动配置继承。
或者,您可以在 PAC 安装的命名空间(通常为 tekton-pipelines,或通过 OpenShiftPipelinesAsCode CR 中的 targetNamespace 配置)中创建一个全局 Repository CR。如果您在该命名空间中创建一个名为 pipelines-as-code 的 Repository CR,则您在其中指定的设置将自动应用于您创建的所有 Repository CR。
关键点:
- 名称:必须精确为
pipelines-as-code - 命名空间:必须是 PAC 安装命名空间(例如
tekton-pipelines) - 自动应用:设置自动应用于所有 Repository CR
- 技术预览:此功能为技术预览
示例:全局 Repository CR
在 PAC 命名空间中创建全局 Repository CR:
应用 CR:
行为:
- 您创建的所有 Repository CR 都将继承这些
git_provider设置 - 单个 Repository CR 可以根据需要覆盖这些设置
- 仍需在每个 Repository CR 中指定
url及其他仓库特定设置
示例:使用全局设置
使用上述全局 CR,您可以创建配置最简的单个 Repository CR:
设置并发限制
并发限制有助于防止在大量事件同时触发流水线时资源耗尽。您可以设置一个仓库允许的最大并发 PipelineRun 数量。
配置并发限制
编辑您的 Repository CR,添加 concurrency_limit 字段:
重要说明:
- 最小值为
1 - 如果未指定,则不限制并发 PipelineRun 数量
- 达到限制时,新事件将排队等待已有 PipelineRun 完成
示例用例
高流量仓库:限制并发运行数以防止集群过载:
资源密集型流水线:限制并发以确保每次运行有足够资源:
无限制(默认):允许无限并发运行:
验证并发限制
查看 Repository CR:
示例输出(简略):
监控正在运行的 PipelineRuns:
示例输出:
更改流水线定义的源分支
默认情况下,Pipelines-as-Code 会从触发事件所在的分支(例如 push 或 pull request 的分支)拉取 PipelineRun 定义。
您可以通过在 Repository 自定义资源中使用 spec.settings.pipelinerun_provenance 字段更改此行为。该设置控制 PipelineRun 定义从哪个分支拉取。
配置 PipelineRun 定义来源
pipelinerun_provenance 支持的值:
source:默认行为。PipelineRun 定义从触发事件所在分支拉取。default_branch:PipelineRun 定义从 Git 提供商配置的仓库默认分支拉取(例如main、master或trunk)。
安全性优势
允许用户将 PipelineRun 定义的来源指定为默认分支,是另一层安全保障。它确保只有有权合并提交到默认分支的用户,才能更改 PipelineRun 定义并访问基础设施。
- 防止恶意流水线更改:流水线定义必须合并到默认分支后才能执行。
- 强制审查流程:所有流水线更改都经过标准的合并/审查流程。
- 流水线行为一致:所有运行均使用默认分支的相同流水线定义。
配置对比
注意:根据 Red Hat OpenShift Pipelines 文档,推荐使用 default_branch 设置作为安全措施,以确保流水线更改在合并审查过程中得到最大程度的验证。
自定义参数扩展
您可以在 Repository CR 中定义自定义参数,这些参数将在为该仓库创建的所有 PipelineRun 中展开。此功能适用于为所有流水线设置通用值。
定义自定义参数
在 Repository CR 的 spec.params 字段中添加参数:
在流水线中使用自定义参数
重要:Repository CR 参数使用 PAC 变量语法 {{ param }},而非 Tekton 的 $(params.param) 语法。
-
PAC 变量 (
{{ variable }}):PAC 在创建 PipelineRun 之前替换这些变量,包括:- Repository CR 中
spec.params的参数(如{{ environment }}、{{ cluster-name }}) - PAC 内置变量(如
{{ revision }}、{{ repo_url }}、{{ source_branch }})
- Repository CR 中
-
Tekton 参数 (
$(params.param)):Tekton 在 PipelineRun 执行时解析,引用 PipelineRun 自身的spec.params。
在 PipelineRun 定义中使用 PAC 变量语法引用 Repository CR 参数:
工作原理:
- PipelineRun 创建前:PAC 替换所有
{{ variable }}语法为 Repository CR 参数和内置变量的实际值 - PipelineRun 创建时:PAC 创建的 PipelineRun 中所有变量已被替换
- 执行时:Tekton 通过读取 PipelineRun 的
spec.params解析$(params.xxx)语法
示例转换:
- Git 仓库中:
value: "{{ environment }}" - PAC 替换为:
value: "production"(来自 Repository CR 参数) - 创建的 PipelineRun 中为:
- name: environment/value: "production" - 任务脚本中使用:
$(params.environment)→ Tekton 解析为"production"
参数优先级
参数展开顺序(优先级从高到低):
- PipelineRun 参数:PipelineRun 中显式定义的参数
- Repository 参数:Repository CR 中定义的参数
- 动态变量:PAC 动态变量(如
{{ revision }}、{{ repo_url }})
示例:环境特定配置
使用 Repository 参数配置不同环境:
生产环境仓库:
预发布环境仓库:
两个仓库可以使用相同的流水线定义,参数自动从 Repository CR 填充。
组合高级功能
您可以在单个 Repository CR 中组合所有高级功能:
最佳实践
1. 并发限制
- 设置合适的限制:考虑集群资源和流水线资源需求
- 监控使用情况:当限制过低时,注意排队事件
- 动态调整:高流量时增加限制,节约资源时减少限制
2. 源分支配置
- 使用稳定分支:从稳定分支(如
main)拉取流水线定义 - 测试流水线更改:在功能分支测试流水线更改后再合并到源分支
- 文档说明:清晰记录哪个分支包含流水线定义
3. 自定义参数
- 使用有意义的名称:选择清晰、描述性的参数名
- 保持值简单:参数值使用简单字符串
- 文档说明:记录每个参数的作用及使用场景
- 避免存储密钥:不要在 Repository 参数中存储密钥,使用 Kubernetes Secret
故障排查
并发限制不起作用
-
确认限制已设置:
示例输出:
-
检查是否有排队事件:查看是否有事件等待 PipelineRun 完成
-
查看 PAC 控制器日志:
示例输出:
参数未展开
-
确认参数已定义:
-
检查参数语法:确保使用的是
{{ param }}语法引用 Repository CR 参数,而非$(params.param) -
验证变量替换:查看创建的 PipelineRun 是否被 PAC 替换变量:
-
检查 PipelineRun:确认参数未被 PipelineRun 定义中覆盖
后续步骤
- Configure Repository - 基础仓库配置
- Maintain Pipeline Code - 流水线定义指南
- Manage PipelineRuns - PipelineRun 管理
- Common Issues - 故障排查指南