一个TaskRun定义支持以下领域:
需要: apiVersion-指定API版本,例如 tekton.dev/v1beta1。kind-将此资源对象标识为TaskRun对象。metadata-指定TaskRun唯一标识的元数据,例如name。spec-指定TaskRun的配置。taskRef或taskSpec -指定TaskRun将执行的tasks。 可选的: serviceAccountName-指定一个ServiceAccount对象,该对象提供TaskRun用于执行的自定义凭据。params-指定Task所需的执行参数。resources-指定所需的PipelineResource值。inputs指定输入资源。outputs指定输出资源。timeout-指定TaskRun失败之前的超时时间。podTemplate-指定一个Pod模板作为起点用于配置Task的Pods。workspaces-指定要用于Workspaces声明的物理卷 Task要在Task中指定要执行的代码,使用taskRef字段:
spec: taskRef: name: read-task您还可以使用taskSpec字段直接在TaskRun中嵌入所需的Task定义:
spec: taskSpec: resources: inputs: - name: workspace type: git steps: - name: build-and-push image: gcr.io/kaniko-project/executor:v0.17.1 # specifying DOCKER_CONFIG is required to allow kaniko to detect docker credential env: - name: "DOCKER_CONFIG" value: "/tekton/home/.docker/" command: - /kaniko/executor args: - --destination=gcr.io/my-project/gohelloworld如果要执行的task包含参数,可以通过parms字段指定,若task中未设置默认值,则必须指定
spec: params: - name: flags value: -someflag如果task中设置了resource则必须指定,可以在taskrun中直接指定或者引用已有的 PiplineResource对象
引用已有的PiplineResource spec: resources: inputs: - name: workspace resourceRef: name: java-git-resource outputs: - name: image resourceRef: name: my-app-image 直接指定 spec: resources: inputs: - name: workspace resourceSpec: type: git params: - name: url value: https://github.com/pivotal-nader-ziada/gohelloworld您可以指定Pod模板配置,该配置将用作Pod的配置起点,您的Task中指定的容器映像将在其中执行。 这使您可以专门为该TaskRun自定义Pod配置。
在下面的例子中,Task指定了一个volumeMount(my-cache)对象,也被TaskRun提供,采用了PersistentVolumeClaim卷。在该SchedulerName字段中还配置了特定的调度程序 。在Pod与常规(非根)用户权限执行。
apiVersion: tekton.dev/v1beta1 kind: Task metadata: name: mytask namespace: default spec: steps: - name: writesomething image: ubuntu command: ["bash", "-c"] args: ["echo 'foo' > /my-cache/bar"] volumeMounts: - name: my-cache mountPath: /my-cache --- apiVersion: tekton.dev/v1beta1 kind: TaskRun metadata: name: mytaskrun namespace: default spec: taskRef: name: mytask podTemplate: schedulerName: volcano securityContext: runAsNonRoot: true runAsUser: 1001 volumes: - name: my-cache persistentVolumeClaim: claimName: my-volume-claim如果task指定一个或多个workspaces,则必须将这些workspaces映射到TaskRun定义中的相应物理卷。例如,可以将PersistentVolumeClaim卷映射到workspaces,如下所示:
workspaces:
name: myworkspace # must match workspace name in the Task persistentVolumeClaim: claimName: mypvc # this PVC must already exist subPath: my-subdirSidecar是与Steps任务中指定的容器并行运行的容器,以为执行这些tasks提供辅助支持。例如,Sidecar可以运行日志记录守护程序,更新共享卷上文件的服务或网络代理。
Tekton支持将Sidecar注入到属于TaskRun的Pod中,条件是一旦Task中的所有步骤完成执行,则终止在Pod中运行的每个Sidecar。 这可能会导致Pod包含每个受影响的Sidecar(重试计数为1),这与预期的容器映像不同。
为了仅消耗从被调用的任务一次执行一个步骤所需的最少资源,Tekton仅从每个步骤中请求CPU,内存和临时存储的最大值。 这足够了,因为步骤只能在Pod中一次执行一个。 最大值以外的请求都设置为零。
当在其中执行TaskRun的名称空间中存在LimitRange参数并且为容器资源请求指定了最小值时,Tekton将搜索名称空间中存在的所有LimitRange值,并使用最小值而不是0。
您可以使用timeout字段,以分钟为单位设置TaskRun的所需超时值。 如果未在TaskRun中指定此值,则将应用全局默认超时值。 如果将超时设置为0,则TaskRun在遇到错误时立即失败。
首次安装Tekton时,全局默认超时设置为60分钟。 您可以使用config/config-defaults.yaml中的default-timeout-minutes字段设置其他全局默认超时值。
超时值是符合Go的ParseDuration格式的持续时间.例如,有效值为1h30m,1h,1m和60s。 如果将全局超时设置为0,则所有没有单独设置超时的TaskRun都会在遇到错误时立即失败。
通过在TaskRun定义的serviceAccountName字段中指定ServiceAccount对象名称,可以使用一组特定的凭据在TaskRun中执行Task。 如果未明确指定,则TaskRun将使用configmap-defaults ConfigMap中指定的凭据执行。如果未指定此默认值,则TaskRuns将使用为目标名称空间设置的默认服务帐户执行。
执行TaskRun时,其状态字段会累积有关每个步骤以及TaskRun整体执行情况的信息。该信息包括开始和停止时间,退出代码,容器映像的全限定名称以及相应的摘要。
Note! 如果Kubernetes已经OOM杀死了任何Pod,即使TaskRun的退出代码为0也被标记为失败。
下表显示了如何读取TaskRun的总体状态:
statusreasoncompletionTime is setDescriptionUnknownStartedNoTaskRun刚刚被控制器拉取UnknownPendingNoTaskRun正在等待状态为Pod的PodUnknownRunningNoTaskRun已通过验证并开始执行其工作UnknownTaskRunCancelledNo用户请求取消TaskRun。取消尚未完成。TrueSucceededYesTaskRun成功完成FalseFailedYesTaskRun失败,因为步骤之一失败False[Error message]NoTaskRun遇到非永久错误,并且仍在运行。它可能最终会成功.False[Error message]YesTaskRun因永久错误而失败(通常是验证)FalseTaskRunCancelledYesTaskRun已成功取消.FalseTaskRunTimeoutYesTaskRun超时.如果在TaskRun调用的任务中定义了多个步骤,则可以使用以下命令在steps.results字段中监视其执行状态,其中是目标TaskRun的名称:
状态中还包含用于实例化TaskRun的确切任务规范,以实现全面的可审核性。
相应的状态以在任务定义中指定步骤的顺序显示在status.steps列表中。
如果在调用的任务中指定了一个或多个结果字段,则TaskRun的执行状态将包括Task Results部分,其中Results逐字显示,包括原始行返回和空格。 例如:
Status: # […] Steps: # […] Task Results: Name: current-date-human-readable Value: Thu Jan 23 16:29:06 UTC 2020 Name: current-date-unix-timestamp Value: 1579796946要取消当前正在执行的TaskRun,请更新其定义以将其标记为已取消。这样做时,与该TaskRun相关联的所有正在运行的Pod都将被删除。例如:
apiVersion: tekton.dev/v1alpha1 kind: TaskRun metadata: name: go-example-git spec: # […] status: "TaskRunCancelled"扫描关注我: