diff --git a/pkg/apis/pipeline/v1alpha1/pipeline_types.go b/pkg/apis/pipeline/v1alpha1/pipeline_types.go index 4c8379c2b6d..27c4010ace6 100644 --- a/pkg/apis/pipeline/v1alpha1/pipeline_types.go +++ b/pkg/apis/pipeline/v1alpha1/pipeline_types.go @@ -142,6 +142,10 @@ type PipelineTask struct { // Refer Go's ParseDuration documentation for expected format: https://golang.org/pkg/time/#ParseDuration // +optional Timeout *metav1.Duration `json:"timeout,omitempty"` + + // Set the NodeSelector on PipelineTask level to allow + // for different NodeSelectors for different steps. + NodeSelector map[string]string `json:"nodeSelector,omitempty"` } func (pt PipelineTask) HashKey() string { diff --git a/pkg/reconciler/pipelinerun/pipelinerun.go b/pkg/reconciler/pipelinerun/pipelinerun.go index ed90efee8b9..1ebf112bf2d 100644 --- a/pkg/reconciler/pipelinerun/pipelinerun.go +++ b/pkg/reconciler/pipelinerun/pipelinerun.go @@ -587,6 +587,10 @@ func (c *Reconciler) createTaskRun(rprt *resources.ResolvedPipelineRunTask, pr * PodTemplate: pr.Spec.PodTemplate, }} + if len(rprt.PipelineTask.NodeSelector) > 0 { + tr.Spec.PodTemplate.NodeSelector = rprt.PipelineTask.NodeSelector + } + if rprt.ResolvedTaskResources.TaskName != "" { tr.Spec.TaskRef = &v1alpha1.TaskRef{ Name: rprt.ResolvedTaskResources.TaskName,