使用Results进行数据传递
Results简介
◼ 在Pipeline的Task之间使用同一个共享的Workspace可以完成数据共享,但对于简单的字符串数据的传递,则可以使用Results API完成
◼ Results用于让Task及其Step保存执行结果,并可在同一Pipeline中的后续Task中调用该结果
在Task中使用Results
◼ 以列表形式定义在spec.results字段中
◼ Task将会为每个results条目自动创建一个文件以进行保存,这些文件统一放置于/tektons/results目录中
◼ 每个results条目的相关值(value)需要在Step中进行生成并保存,且Task不会对相关数据进行任何多余的操作
◼ 在Step代码中引用results条目的便捷格式为“$(results.<resultName>.path)”,这样可以避免硬编码
◆注意: $(results.<resultName>.path)”会被替换为文件路径,获取结果值需要获取该文件中保存的内容
在Task中引用Results时使用的变量
◼ results.<resultName>.path
◼ results['<resultName>'].path 或 results["<resultName>"].path
在Pipeline中引用Results时使用的变量
◼ tasks.<taskName>.results.<resultName>
◼ tasks.<taskName>.results['<resultName>'] 或 tasks.<taskName>.results["<resultName>"]
使用Results 进行数据传递示例
在一个Task中定义了两个Step
◼ 前一个Step生成日期时间
◼ 后一个Step结果应用程序版本号及日期时间生成build ID
◼ build ID将作为后续Task中的镜像文件标签使用
root@master01:~/tekton-and-argocd-in-practise/03-tekton-advanced# cat 07-results-demo.yaml apiVersion: tekton.dev/v1beta1 kind: Task metadata: name: generate-buildid spec: params: - name: version description: The version of the application type: string default: "v0.9" results: #定义两个results - name: datetime description: The current date and time - name: buildId description: The build ID steps: - name: generate-datetime image: ikubernetes/admin-box:v1.2 script: | #!/usr/bin/env bash datetime=`date +%Y%m%d-%H%M%S` echo -n ${datetime} | tee $(results.datetime.path) #时间重定向datetime - name: generate-buildid image: ikubernetes/admin-box:v1.2 script: | #!/usr/bin/env bash buildDatetime=`cat $(results.datetime.path)` #再次重定向到buildDatetime buildId=$(params.version)-${buildDatetime} #版本加时间result echo -n ${buildId} | tee $(results.buildId.path) root@master01:~/tekton-and-argocd-in-practise/03-tekton-advanced# kubectl apply -f 07-results-demo.yaml task.tekton.dev/generate-buildid created root@master01:~/tekton-and-argocd-in-practise/03-tekton-advanced# tkn task start generate-buildid --showlog
root@master01:~/tekton-and-argocd-in-practise/03-tekton-advanced# tkn task start generate-buildid --showlog ? Value for param `version` of type `string`? (Default is `v0.9`) v0.9 TaskRun started: generate-buildid-run-4klf6 Waiting for logs to be available... [generate-datetime] 202203-134336 [generate-buildid] v0.9-202203-134336