高级 Repository 配置
本指南面向需要高级 Repository CR 配置的 普通用户,例如并发限制、源分支设置以及自定义参数展开。
本指南将介绍 Repository Custom Resources 的高级配置选项,包括:
- 用于自动继承配置的全局 Repository CR(Tech Preview)
- 并发限制
- 源分支配置
- 自定义参数展开
目录
前提条件创建全局 Repository CR示例:全局 Repository CR示例:使用全局设置设置并发限制配置并发限制使用场景示例验证并发限制更改 Pipeline 定义的源分支配置 PipelineRun 定义来源安全优势配置对比自定义参数展开定义自定义参数在 pipeline 中使用自定义参数参数优先级示例:按环境配置组合使用高级功能最佳实践1. 并发限制2. 源分支配置3. 自定义参数故障排除并发限制未生效参数未展开下一步前提条件
- PAC 组件已部署并运行
- 已创建 Repository CR(请参见 Configure Repository)
- 具备集群管理员或命名空间级别权限
创建全局 Repository CR
全局 Repository CR 功能是一个 Technology Preview 功能,可为所有 Repository CR 提供自动配置继承。
或者,你可以在安装 PAC 的命名空间中创建一个 全局 Repository CR(通常是 tekton-pipelines,或者通过 OpenShiftPipelinesAsCode CR 中的 targetNamespace 进行配置)。如果你在此命名空间中创建一个名为 pipelines-as-code 的 Repository CR,则其中指定的设置将自动应用于你创建的所有 Repository CR。
关键点:
- 名称:必须严格为
pipelines-as-code - 命名空间:必须位于 PAC 安装命名空间中(例如
tekton-pipelines) - 自动应用:设置会自动应用到所有 Repository CR
- Tech Preview:这是一个 Technology Preview 功能
示例:全局 Repository CR
在 PAC 命名空间中创建一个全局 Repository CR:
应用该 CR:
行为:
- 你创建的所有 Repository CR 都将继承这些
git_provider设置 - 单独的 Repository CR 在需要时可以覆盖这些设置
- 你仍然需要在每个 Repository CR 中指定
url和其他仓库特定设置
示例:使用全局设置
使用上面的全局 CR 后,你可以用最少的配置创建单独的 Repository CR:
设置并发限制
并发限制有助于防止当大量事件同时触发 pipeline 时造成资源耗尽。你可以为某个仓库设置允许运行的最大并发 PipelineRun 数量。
配置并发限制
编辑你的 Repository CR,添加 concurrency_limit 字段:
重要:
- 最小值为
1 - 如果未指定,则并发 PipelineRun 数量不受限制
- 达到限制后,新事件将排队,直到某个 PipelineRun 完成
使用场景示例
高流量仓库:限制并发运行,以防止集群过载:
资源密集型 pipeline:限制并发数,以确保每次运行都有足够资源:
无限制(默认):允许无限并发运行:
验证并发限制
检查 Repository CR:
示例输出(已截断):
监控正在运行的 PipelineRun:
示例输出:
更改 Pipeline 定义的源分支
默认情况下,Pipelines-as-Code 会从触发事件所在的分支中获取 PipelineRun 定义(例如 push 或 pull request 所在的分支)。
你可以通过在 Repository custom resource 中使用 spec.settings.pipelinerun_provenance 字段来更改此行为。该设置用于控制从哪个分支获取 PipelineRun 定义。
配置 PipelineRun 定义来源
pipelinerun_provenance 支持的值:
source:默认行为。PipelineRun 定义从触发事件所在的分支中获取。default_branch:PipelineRun 定义从 Git provider 上配置的仓库默认分支中获取(例如main、master或trunk)。
安全优势
允许用户将 PipelineRun 定义的来源指定为默认分支,是额外的一层安全保障。它确保只有有权将提交合并到默认分支的用户,才能更改 PipelineRun 定义并获取基础设施访问权限。
- 防止恶意 pipeline 更改:pipeline 定义必须先合并到默认分支,之后才能执行。
- 强制执行审查流程:所有 pipeline 更改都必须经过标准的合并/审查流程。
- 确保 pipeline 行为一致:所有运行都使用来自默认分支的相同 pipeline 定义。
配置对比
注意:根据 Red Hat OpenShift Pipelines documentation,建议将 default_branch 设置作为一种安全措施,以确保在合并审查流程中对 pipeline 更改进行最大程度的验证。
自定义参数展开
你可以在 Repository CR 中定义自定义参数,这些参数会在为该仓库创建的所有 PipelineRuns 中展开。这对于在所有 pipeline 中设置公共值非常有用。
定义自定义参数
向 Repository CR 的 spec.params 字段添加参数:
在 pipeline 中使用自定义参数
重要:Repository CR 参数使用 PAC 变量语法 {{ param }},而不是 Tekton 的 $(params.param) 语法。
-
PAC 变量(
{{ variable }}):PAC 会在创建 PipelineRun 之前替换这些变量。其中包括:- 来自
spec.params的 Repository CR 参数(例如{{ environment }}、{{ cluster-name }}) - PAC 内置变量(例如
{{ revision }}、{{ repo_url }}、{{ source_branch }})
- 来自
-
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" - Task 脚本使用:
$(params.environment)→ Tekton 解析为"production"
参数优先级
参数按照以下顺序展开(优先级从高到低):
- PipelineRun params:在 PipelineRun 中显式定义的参数
- Repository params:在 Repository CR 中定义的参数
- 动态变量:PAC 动态变量(例如
{{ revision }}、{{ repo_url }})
示例:按环境配置
使用 Repository params 配置不同环境:
生产环境 Repository:
预发布环境 Repository:
这两个仓库都可以使用相同的 pipeline 定义,并且参数会自动从 Repository CR 中填充。
组合使用高级功能
你可以在单个 Repository CR 中组合所有高级功能:
最佳实践
1. 并发限制
- 设置合适的限制:结合你的集群资源和 pipeline 的资源需求进行考虑
- 监控使用情况:如果限制过低,注意观察排队的事件
- 动态调整:在高流量时段提高限制,在需要节省资源时降低限制
2. 源分支配置
- 使用稳定分支:从稳定分支(例如
main)获取 pipeline 定义 - 测试 pipeline 更改:在功能分支中测试 pipeline 更改,然后再合并到源分支
- 记录更改:清楚地记录哪个分支包含 pipeline 定义
3. 自定义参数
- 使用有意义的名称:选择清晰、具有描述性的参数名称
- 保持值简单:参数尽量使用简单的字符串值
- 记录参数:说明每个参数的作用及其使用时机
- 避免使用 secret:不要将 secret 存储在 Repository params 中;应改用 Kubernetes Secrets
故障排除
并发限制未生效
-
确认已设置限制:
示例输出:
-
检查是否存在排队事件:查找正在等待 PipelineRun 完成的事件
-
验证 PAC controller 日志:
示例输出:
参数未展开
-
确认已定义参数:
-
检查参数语法:确保你使用的是
{{ param }}语法来引用 Repository CR 参数,而不是$(params.param) -
验证变量替换:检查创建出来的 PipelineRun,确认 PAC 是否已替换变量:
-
检查 PipelineRun:确认参数是否在 PipelineRun 定义中被覆盖
下一步
- Configure Repository - 基本仓库设置
- Maintain Pipeline Code - Pipeline 定义指南
- Manage PipelineRuns - PipelineRun 管理
- Common Issues - 故障排除指南