如何在OpenShift中覆盖Tekton全局PipelineRun超时时间?
问题:覆盖PipelineRun全局超时限制
需要同时触发多个运行时长超1小时的PipelineRun,但默认全局超时为1小时导致运行失败,集群管理团队不愿修改全局设置。现有资源包括EventListener、TriggerBinding、TriggerTemplate、Pipeline和PipelineRun。曾尝试为单个任务设置超时(代码如下),但因PipelineRun超时优先级更高未生效:
runAfter: - fetch-repository taskRef: kind: ClusterTask name: buildah timeout: "3h0m0s"
环境信息:
- OpenShift版本:4.9.35
- K8s版本:v1.22.8
- Tekton随OpenShift安装,版本较新但无法确认具体版本
解决方案
1. 直接在PipelineRun中设置超时
在PipelineRun的spec字段中添加timeout,该设置优先级最高,会直接覆盖全局超时限制,示例:
apiVersion: tekton.dev/v1beta1 kind: PipelineRun metadata: generateName: long-running-pipeline- spec: pipelineRef: name: your-pipeline-name timeout: "3h0m0s" # 自定义超时时间,格式符合Go Duration规范 # 其他配置(params、workspaces等)
2. 通过TriggerTemplate传递超时参数
结合你正在使用的TriggerTemplate,可以将超时作为参数配置,实现批量或场景化的超时设置:
步骤1:修改TriggerTemplate,添加超时参数并绑定到PipelineRun
apiVersion: triggers.tekton.dev/v1beta1 kind: TriggerTemplate metadata: name: your-template spec: params: - name: pipeline-timeout description: Timeout for the PipelineRun default: "3h0m0s" # 设置默认超时,可按需调整 resourcetemplates: - apiVersion: tekton.dev/v1beta1 kind: PipelineRun metadata: generateName: pipeline-run- spec: pipelineRef: name: your-pipeline timeout: $(params.pipeline-timeout) # 其他配置(params、workspaces等)
步骤2:(可选)通过TriggerBinding传递自定义超时
如果需要针对不同触发场景设置不同超时,可在TriggerBinding中传递该参数:
apiVersion: triggers.tekton.dev/v1beta1 kind: TriggerBinding metadata: name: your-binding spec: params: - name: pipeline-timeout value: "4h0m0s" # 为该绑定对应的PipelineRun设置特定超时
3. 在Pipeline定义中设置全局超时(Tekton v0.20+支持)
如果你的Tekton版本满足要求(v0.20及以上,OpenShift 4.9附带的版本应该支持),可以直接在Pipeline的spec中设置超时,所有基于该Pipeline创建的PipelineRun会自动继承这个超时(除非PipelineRun单独覆盖):
apiVersion: tekton.dev/v1beta1 kind: Pipeline metadata: name: your-pipeline spec: timeout: "3h0m0s" # 为整个Pipeline设置默认超时 tasks: # 你的任务定义
关键注意事项
- 超时格式必须符合Go Duration规范,例如
3h0m0s、2h30m、1d等 - 优先级顺序:
PipelineRun超时>Pipeline定义超时>全局超时设置,因此只要在PipelineRun层面配置,就能确保覆盖全局限制
内容的提问来源于stack exchange,提问作者linkebon
相关产品推荐
相关产品推荐

