pipeline: Tasks that claim to emit results but don't should fail
Expected Behavior
If I create a Task which claims to emit a result, but it doesn’t, the TaskRun should fail, i.e. I should be able to rely on the interface a Task claims to provide.
Actual Behavior
This will only be considered a failure if something in the Pipeline tries to use the result; if nothing tries to use the result, there will be no error, but if something does try to use the result you will get an error like:
tkn pr list
NAME STARTED DURATION STATUS
sum-three-pipeline-run 10 minutes ago 5 seconds Failed(InvalidTaskResultReference)
Steps to Reproduce the Problem
I took this example pipeline with results and made a few changes:
- add-task no longer emits a result, tho it claims to
- the pipeline no longer refers to results from add-task
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
name: add-task
spec:
params:
- name: first
description: the first operand
- name: second
description: the second operand
results:
- name: sum
description: the sum of the first and second operand
steps:
- name: add
image: alpine
env:
- name: OP1
value: $(params.first)
- name: OP2
value: $(params.second)
command: ["/bin/sh", "-c"]
args:
- echo -n $((${OP1}+${OP2}))
---
apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
name: sum-three-pipeline
spec:
params:
- name: first
description: the first operand
- name: second
description: the second operand
- name: third
description: the third operand
tasks:
- name: first-add
taskRef:
name: add-task
params:
- name: first
value: $(params.first)
- name: second
value: $(params.second)
- name: second-add
taskRef:
name: add-task
params:
- name: first
value: "5"
- name: second
value: $(params.third)
---
apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata:
name: sum-three-pipeline-run
spec:
pipelineRef:
name: sum-three-pipeline
params:
- name: first
value: "2"
- name: second
value: "10"
- name: third
value: "10"
If you apply this, you will see that it runs successfully. If you add any references to the results, the run will fail.
Additional Info
-
Kubernetes version: v1.16.13-gke.401
-
Tekton Pipeline version: HEAD @ 7b5b2fa3ddd99d52baaa10face967b603c6940ee
About this issue
- Original URL
- State: open
- Created 4 years ago
- Reactions: 1
- Comments: 19 (9 by maintainers)
@bobcatfish thank you for the detailed discussion above - makes sense to distinguish between producing
resultsand keys in objectresults- especially given that users will have control to say that they keys are required if they wishagreed, we can go ahead with making the
resultsthemselves required - we’ll need to explain this well in the docs though (cc @vinamra28)FYI in https://github.com/tektoncd/pipeline/pull/3472 we’re removing the behaviour where a PipelineRun is put into a failed state due to a Task dropping a result. Feedback welcome!Edit for posterity: I was wrong - a PipelineRun was never put into a failed state due to a Task dropping a result. Only if the PipelineRun couldn’t fetch the assocaited PipelineSpec while trying to resolve those result references. Ignore this message!
thanks @bobcatfish, https://github.com/tektoncd/pipeline/issues/2701 has some discussion as well