如何重启Git中pipeline-run.yml定义且用Cloud Native Buildpacks的Tekton PipelineRun
问题描述
我们希望使用来自Tekton Hub的官方Tekton buildpacks任务,通过Cloud Native Buildpacks运行构建任务。面向Tekton的buildpacks官方文档要求我们从Tekton Hub安装buildpacks与git-clone Task,创建Secret、ServiceAccount、PersistentVolumeClaim以及Tekton Pipeline。
由于配置已参数化,我们不希望通过冗长的kubectl命令启动Tekton流水线,而是使用单独的pipeline-run.yml YAML文件配置PipelineRun,文件内包含ServiceAccount、工作区、镜像名称等引用信息,示例如下:
apiVersion: tekton.dev/v1beta1 kind: PipelineRun metadata: name: buildpacks-test-pipeline-run spec: serviceAccountName: buildpacks-service-account # 仅配置权限时需要 pipelineRef: name: buildpacks-test-pipeline workspaces: - name: source-workspace subPath: source persistentVolumeClaim: claimName: buildpacks-source-pvc - name: cache-workspace subPath: cache persistentVolumeClaim: claimName: buildpacks-source-pvc params: - name: image value: <REGISTRY/IMAGE NAME, 例如 gcr.io/test/image > # 定义输出镜像的名称
目前使用kubectl apply -f pipeline-run.yml单次运行Tekton流水线不存在问题,但我们如何重启该配置,或是复用这套基于YAML的配置执行其他流水线运行任务?
解决方案
Tekton中PipelineRun是一次性运行资源,同一命名空间下名称唯一,所以直接重复执行kubectl apply同一份带固定名称的配置文件会触发名称冲突报错,可以通过以下几种方式解决:
- 方案一:修改配置实现自动生成运行名称
把YAML文件里metadata.name字段替换为metadata.generateName: buildpacks-test-pipeline-run-,后续每次执行kubectl create -f pipeline-run.yml时,Tekton会自动在配置的前缀后拼接随机字符串生成唯一名称,直接生成新的运行实例,完全复用原有配置。如果不想修改原有配置文件,也可以每次运行时执行kubectl create -f pipeline-run.yml --generate-name=""临时触发自动命名。 - 方案二:基于现有模板调整参数运行其他任务
复制现有pipeline-run.yml为新的配置文件,仅修改需要调整的字段即可适配不同运行需求,常见的修改项包括:- 调整
params下的image参数值,指定新的输出镜像地址 - 更换
serviceAccountName适配不同镜像仓库的推送权限 - 修改
workspaces下的PVC配置,对应不同的代码源存储 - 修改
pipelineRef指向其他已部署的流水线模板
修改完成后执行kubectl create -f 新配置文件名.yml即可启动对应任务。
- 调整
- 方案三:用Tekton官方CLI快速重启
安装tkn命令行工具后,可以直接基于已有的PipelineRun记录重启,不需要操作YAML文件:执行tkn pipelinerun rerun <已有PipelineRun名称>即可基于原有配置生成新的运行实例,也可以添加--param <参数名>=<参数值>参数临时覆盖指定配置,适配临时调整需求。
内容的提问来源于stack exchange,提问作者jonashackt
相关产品推荐
相关产品推荐

