第 3 章 Pipelines
3.1. Red Hat OpenShift Pipelines 发行注记
Red Hat OpenShift Pipelines 是基于 Tekton 项目的一个云原生 CI/CD 环境,它提供:
- 标准 Kubernetes 原生管道定义 (CRD)。
- 无需 CI 服务器管理开销的无服务器管道。
- 使用任何 Kubernetes 工具(如 S2I、Buildah、JIB 和 Kaniko)构建镜像。
- 不同 Kubernetes 发布系统间的可移植性。
- 用于与管道交互的强大 CLI。
- 使用 OpenShift Container Platform Web 控制台的 Developer 视角集成用户体验。
如需了解 Red Hat OpenShift Pipelines 的概述,请参阅了解 OpenShift Pipelines。
3.1.1. 使开源包含更多
红帽承诺替换我们的代码、文档和网页属性中存在问题的语言。我们从这四个术语开始: master、slave、blacklist 和 whitelist。这些更改将在即将发行的几个发行本中逐渐实施。详情请查看 Red Hat CTO Chris Wright 信息。
3.1.2. Red Hat OpenShift Pipelines 正式发布 1.4 发行注记
Red Hat OpenShift Pipelines General Availability(GA)1.4 现在包括在 OpenShift Container Platform 4.7 中。
除了 stable 和 preview Operator 频道外,Red Hat OpenShift Pipelines Operator 1.4.0 还带有 ocp-4.6、ocp-4.5 和 ocp-4.4 弃用的频道。这些过时的频道及其支持将在以下 Red Hat OpenShift Pipelines 发行版本中删除。
3.1.2.1. 兼容性和支持列表
这个版本中的一些功能当前还处于技术预览状态。它们并不适用于在生产环境中使用。
在下表中,功能被标记为以下状态:
- TP: 技术预览
- GA: 正式发行
请参阅红帽门户网站中关于对技术预览功能支持范围的信息:
功能 | Version | 支持状态 |
---|---|---|
Pipelines | 0.22 | GA |
CLI | 0.17 | GA |
Catalog | 0.22 | GA |
触发器 | 0.12 | TP |
Pipeline 资源 | - | TP |
如果您有疑问或希望提供反馈信息,请向产品团队发送邮件 pipelines-interest@redhat.com。
3.1.2.2. 新功能
除了包括修复和稳定性改进的信息外,以下小节突出介绍了 Red Hat OpenShift Pipelines 1.4 中的新内容。
自定义任务有以下改进:
- Pipeline 结果现在可以引用自定义任务生成的结果。
- 自定义任务现在可以使用工作区、服务帐户和 pod 模板来构建更复杂的自定义任务。
finally
的任务包括以下改进:-
在
finally
任务中支持when
表达式,它可以有效地保证执行,并提高了任务的可重复使用性。 finally
任务可以被配置为消耗同一管道中任何任务的结果。注意OpenShift Container Platform 4.7 web 控制台中不支持
when
表达式和finally
任务。
-
在
-
添加了对
dockercfg
或dockerconfigjson
类型的多个 secret 的支持,以便在运行时进行身份验证。 -
添加支持
git-clone
任务的 sparse-checkout 的功能。这可让您将存储库的子集克隆为本地副本,并帮助您限制克隆的存储库的大小。 - 您可以创建管道以待处理状态运行,而无需实际启动它们。在负载非常重的集群中,这允许 Operator 控制管道运行的开始时间。
-
确保为控制器手动设置
SYSTEM_NAMESPACE
环境变量 ; 这在之前被默认设置。 -
现在,一个非 root 用户被添加到管道的构建基础镜像中,以便
git-init
能够以非 root 用户身份克隆存储库。 - 支持在管道运行启动前在已解析的资源间验证依赖项。管道中的所有结果变量都必须有效,管道中的可选工作区只能传递给期望管道启动运行的任务。
- controller 和 Webhook 作为非 root 组运行,并且删除了它们的多余功能,以使它们更加安全。
-
您可以使用
tkn pr logs
命令查看重试任务运行的日志流。 -
您可以使用
tkn tr delete
命令中的--clustertask
选项删除与特定集群任务关联的所有任务。 -
通过引入一个新的
customResource
字段,增加了对在EventListener
资源中使用 Knative 服务的支持。 - 当事件有效负载没有使用 JSON 格式时,会显示错误消息。
-
源控制拦截器(如 GitLab、BitBucket 和 GitHub)现在使用新的
InterceptorRequest
或InterceptorResponse
类型的接口。 -
新的 CEL 功能
marsagingJSON
被实现,以便您可以将 JSON 对象或数组编码到字符串。 -
为 CEL 添加了 HTTP 处理器,并添加了源控制内核拦截器。它将四个核心拦截器打包到单一 HTTP 服务器中,该服务器部署在
tekton-pipelines
命名空间中。EventListener
对象通过 HTTP 服务器将事件转发到拦截器。每个拦截器都位于不同的路径。例如,CEL 拦截器位于/cel
路径中。 pipelines-scc
安全性上下文约束(SCC)与默认的pipeline
服务帐户一同使用。此新服务帐户与anyuid
类似,但 OpenShift Container Platform 4.7 的 SCC 在 YAML 中定义中有一个小的差别:fsGroup: type: MustRunAs
3.1.2.3. 已弃用的功能
-
不支持 pipeline 资源存储中的
build-gcs
子类型和gcs-fetcher
镜像。 -
在集群任务的
TaskRun
字段中,删除标签tekton.dev/task
。 -
对于 webhook,移除了与字段
admissionReviewVersions
对应的v1beta1
值。 -
用于构建和部署的
creds-init
帮助程序镜像已被删除。 在触发器 spec 和绑定中,弃用的字段
template.name
已被删除,并使用template.ref
替代。您应该更新所有eventListener
定义,以使用ref
字段。注意从 Pipelines 1.3.x 和早期版本升级到 Pipelines 1.4.0 会中断事件监听程序,因为
template.name
字段不可用。在这种情况下,使用 Pipelines 1.4.1 来提供恢复的template.name
字段。-
对于
EventListener
自定义资源/对象,PodTemplate
和ServiceType
字段已弃用,并使用Resource
替代。 - 过时的 spec 风格内嵌绑定已被删除。
-
spec
字段已从triggerSpecBinding
中删除。 - 事件 ID 已从包括 5 个字符的随机字符串改为 UUID。
3.1.2.4. 已知问题
- 在 Developer 视角中,管道指标和触发器功能仅适用于 OpenShift Container Platform 4.7.6 或更高版本。
-
在 IBM Power Systems、IBM Z 和 LinuxONE 中,不支持
tkn hub
命令。 -
当您在 IBM Power Systems(ppc64le)、IBM Z 和 LinuxONE(s390x)集群上运行 Maven 和 Jib Maven 集群任务时,将
MAVEN_IMAGE
参数值设置为maven:3.6.3-adoptopenjdk-11
。 如果您在触发器绑定中有以下配置,触发器会因为不正确处理 JSON 格式抛出错误:
params: - name: github_json value: $(body)
要解决这个问题:
-
如果您使用触发器 v0.11.0 及更高版本,请使用
marshalJSON
CEL 函数,该函数使用 JSON 对象或数组,并将该对象或数组的 JSON 编码作为字符串返回。 如果使用旧的触发器版本,请在触发器模板中添加以下注解:
annotations: triggers.tekton.dev/old-escape-quotes: "true"
-
如果您使用触发器 v0.11.0 及更高版本,请使用
- 当从 Pipelines 1.3.x 升级到 1.4.x 时,您必须重新创建路由。
3.1.2.5. 修复的问题
-
在以前的版本中,
tekton.dev/task
标签已从集群任务运行中删除,并且引进了tekton.dev/clusterTask
标签。此更改导致的问题可以通过修复clustertask describe
和delete
命令来解决。另外,也修改了任务的lastrun
功能,从而解决应用到在旧版管道中运行任务中的tekton.dev/task
标签的问题。 -
当进行交互式
tkn pipeline start pipelinename
时,会以互动方式创建一个PipelineResource
。如果资源状态不是nil
,tkn p start
命令会输出资源状态。 -
在以前的版本中,
tekton.dev/task=name
标签已从集群任务创建的任务中删除。在这个版本中,使用--last
标志修改tkn clustertask start
命令,以检查所创建的任务运行中的tekton.dev/task=name
标签。 -
当任务使用内联任务规格时,在运行
tkn pipeline describe
命令时对应的任务运行会被嵌入到管道中,任务名称返回为内嵌。 -
修复了
tkn version
命令,显示已安装的 Tekton CLI 工具的版本,无需配置的kubeConfiguration
命名空间或对集群的访问。 -
如果使用意外的参数或者使用多个参数,则
tkn completion
命令会出错。 -
在以前的版本中,当管道转换为
v1alpha1
版本并恢复到v1beta1
版本时,带有嵌套在一个管道规格中的finally
的任务将会丢失那些finally
任务。修复了转换过程中发生的这个错误,以避免潜在的数据丢失。现在,带有嵌套在管道规格中的finally
任务的管道运行会被序列化并存储在 alpha 版本中,它们只会在以后进行反序列化。 -
在以前的版本中,当服务帐户中的
secrets
字段被设置为{}
时,pod 生成中会出现一个错误。任务运行失败,显示CouldntGetTask
,因为带有空 secret 名称的 GET 请求返回了一个错误,表示资源名称可能不是空的。这个问题已通过避免kubeclient
GET 请求中的空 secret 名称来解决。 -
现在,可以请求带有
v1beta1
API 版本的管道和v1alpha1
版本,而不会丢失finall
任务。应用返回的v1alpha1
版本将以v1beta1
来保存资源,finally
部分恢复到其原始状态。 -
在以前的版本中,控制器中的一个未设置的
selfLink
字段在 Kubernetes v1.20 集群中造成错误。作为一个临时修复,在没有自动填充的selfLink
字段的值时,CloudEvent
source 字段被设置为与当前源 URI 匹配的值。 -
在以前的版本中,带有点(如
gcr.io
)的 secret 名称会导致任务运行创建失败。这是因为内部使用的 secret 名称作为卷挂载名称的一部分。卷挂载名称遵循 RFC1123 DNS 标签标准,它不允许使用点作为名称的一部分。这个问题已通过将点替换为横线来解决。 -
现在,上下文变量会在
finally
任务中进行验证。 -
在以前的版本中,当任务运行协调器传递了一个任务运行,且没有之前的状态更新,其中包含它创建的 pod 的名称时,任务运行协调程序会列出与任务运行关联的 pod。任务运行协调程序使用任务运行标签(被传播到 pod)来查找 pod。在任务运行期间更改这些标签,会导致代码找不到现有的 pod。因此,会创建重复的 pod。这个问题已通过在查找 pod 时将任务运行协调器更改为只使用
tekton.dev/taskRun
Tekton 控制的标签来解决。 - 在以前的版本中,当管道接受一个可选的工作区并将其传递给管道任务时,如果未提供工作区,管道运行协调器会停止并出错,即使缺少的工作区绑定是可选工作区的有效状态。这个问题已被解决,确保管道运行的协调器不会无法创建任务运行,即使未提供可选的工作区。
- 排序步骤状态的顺序与步骤容器的顺序匹配。
-
在以前的版本中,当 Pod 遇到
CreateContainerConfigError
原因时,任务运行状态被设置为unknown
,这意味着任务和管道会运行,直到 pod 超时为止。这个问题已通过将任务运行状态设置为false
来解决这个问题,因此当 pod 遇到CreateContainerConfigError
原因时,任务被设置为 failed。 -
在以前的版本中,管道结果会在管道运行完成后在第一次协调时解析。这可能会导致管道运行的
Succeeded
条件被覆盖。因此,最终状态信息丢失,可能会使监视管道运行条件的任何服务混淆。当管道运行进入Succeeded
或True
条件时,这个问题可以通过将管道结果解析移到协调结束时来解决。 - 现在,执行状态变量已被验证。这可避免在验证上下文变量来访问执行状态时验证任务结果。
- 在以前的版本中,包含无效变量的管道结果将添加到管道运行中,并包含变量的字面表达式。因此,很难评估结果是否正确填充。这个问题已通过过滤管道运行结果来解决,该结果引用了失败的任务运行。现在,包含无效变量的管道结果将完全不会被管道运行发送。
-
现在,
tkn eventlistener describe
命令已被修复,以避免在没有模板的情况下崩溃。它还显示有关触发器引用的详情。 -
由于
template.name
不可用,从 Pipelines 1.3.x 及早期版本升级到 Pipelines 1.4.0 会破坏事件监听程序。在 Pipelines 1.4.1 中,template.name
已恢复,以避免触发器中的事件监听程序。 -
在 Pipelines 1.4.1 中,
ConsoleQuickStart
自定义资源已更新,以符合 OpenShift Container Platform 4.7 的功能和行为。
3.1.3. Red Hat OpenShift Pipelines 技术预览 1.3 发行注记
3.1.3.1. 新功能
Red Hat OpenShift Pipelines 技术预览(TP)1.3 现在包括在 OpenShift Container Platform 4.7 中。Red Hat OpenShift Pipelines TP 1.3 更新为支持:
- Tekton Pipelines 0.19.0
-
Tekton
tkn
CLI 0.15.0 - Tekton Triggers 0.10.2
- 基于 Tekton Catalog 0.19.0 的集群任务
- OpenShift Container Platform 4.7 中的 IBM Power Systems
- OpenShift Container Platform 4.7 上的 IBM Z 和 LinuxONE
除了包括修复和稳定性改进的信息外,以下小节突出介绍了 Red Hat OpenShift Pipelines 1.3 中的新内容。
3.1.3.1.1. Pipelines
- 构建镜像的任务,如 S2I 和 Buildah 任务,现在发出构建的镜像 URL,其中包含镜像 SHA。
-
由于
Conditions
自定义资源定义(CRD)已弃用,管道任务中引用自定义资源的条件会被禁止。 -
现在,在
Task
CRD 中为以下字段添加了变量扩展:spec.steps[].imagePullPolicy
和spec.sidecar[].imagePullPolicy
。 -
您可以通过将
disable-creds-init
feature-flag 设置为true
来禁用 Tekton 中的内置凭证机制。 -
现在,当在
PipelineRun
配置的Status
字段中的Skipped Tasks
和Task Runs
部分中列出了表达式时,可以解析。 -
git init
命令现在可以克隆递归子模块。 -
现在,
Task
CR 的作者可以为Task
spec 的一个步骤指定超时。 -
现在,您可以将入口点镜像基于
distroless/static:nonroot
镜像,赋予将其复制到目的地的模式,而无需依赖基础镜像中存在的cp
命令。 -
现在,您可以使用配置标记
require-git-ssh-secret-known-hosts
来禁止在 Git SSH secret 中省略已知主机。当标志值设为true
时,必须在 Git SSH secret 中包含known_host
字段。标志的默认值为false
。 - 现在引进了可选工作区的概念。任务或管道可能会声明一个工作区(workspace),并有条件地更改其行为。任务运行或管道运行可能省略了工作区,因此修改任务或管道行为。默认任务运行工作区不会添加到忽略的可选工作区。
- 现在,在 Tekton 中进行凭证初始化会检测一个与非 SSH URL 搭配使用的 SSH 凭证,而 Git pipeline 资源与 Git pipeline 资源相同,并在步骤容器中记录警告。
- 如果 pod 模板指定的关联性被关联性代理覆盖,则任务运行控制器会发出警告事件。
- 任务运行协调程序现在记录了在任务运行完成后发送的云事件的指标。这包括重试。
3.1.3.1.2. Pipelines CLI
-
现在,在以下命令中添加了对
--no-headers flag
的支持:tkn condition list
、tkn triggerbinding list
、tkn eventlistener list
、tkn clustertask list
、tkn clustertriggerbinding list
。 -
当一起使用时,
--last
或--use
选项会覆盖--prefix-name
和--timeout
选项。 -
现在,添加了
tkn eventlistener logs
命令来查看EventListener
日志。 -
tekton hub
命令现在被集成到tkn
CLI。 -
--nocolour
选项现在改为--no-color
。 -
--all-namespaces
标志添加到以下命令中:tkn triggertemplate list
、tkn condition list
、tkn triggerbinding list
、tkn eventlistener list
。
3.1.3.1.3. 触发器
-
现在,您可以在
EventListener
模板中指定资源信息。 -
现在,
EventListener
服务帐户除具有所有触发器资源的get
verb 外,还具有list
和watch
verb。这可让您使用Listers
从EventListener
、Trigger
、TriggerBinding
、TriggerTemplate
和ClusterTriggerBinding
资源中获取数据。您可以使用此功能创建Sink
对象,而不是指定多个通知器,直接向 API 服务器发出调用。 -
添加了一个新的
Interceptor
接口,以支持不可变的输入事件正文。拦截器现在可以在一个新的extensions
字段中添加数据或字段,且无法修改输入正文使其不可变。CEL 拦截器使用这个新的Interceptor
接口。 -
在
EventListener
资源中添加了一个namespaceSelector
字段。使用它来指定EventListener
资源可以从中获取用于处理事件的Trigger
对象的命名空间。要使用namespaceSelector
字段,EventListener
资源的服务帐户必须具有集群角色。 -
触发器
EventListener
资源现在支持到eventlistener
pod 的端到端安全连接。 -
在
TriggerTemplates
资源中把"
替换为\"
的转义行为现在已被删除。 -
一个支持 Kubernetes 资源的、新的
resources
项已作为EventListener
spec 的一部分被添加。 - 添加了对 CEL 拦截器的新功能,它支持 ASCII 字符串的大写和小写。
-
您可以使用触发器中的
name
和value
字段,或事件监听程序来嵌入TriggerBinding
资源。 -
PodSecurityPolicy
配置已更新,可在受限环境中运行。它确保容器必须以非 root 运行。另外,使用 Pod 安全策略的基于角色的访问控制也从集群范围移到命名空间范围。这样可确保触发器无法使用与命名空间不相关的其他 Pod 安全策略。 -
现在,添加了对内嵌触发器模板的支持。您可以使用
name
字段来指代嵌入的模板,或者在spec
字段中嵌入模板。
3.1.3.2. 已弃用的功能
-
使用
PipelineResources
CRD 的管道模板现已弃用,并将在以后的发行版本中删除。 -
template.name
字段已弃用,被template.ref
字段替代,并将在以后的发行版本中删除。 -
使用
-c
作为--check
命令的缩写已被删除。另外,全局tkn
标志被添加到version
命令中。
3.1.3.3. 已知问题
-
CEL 覆盖在新的顶层
extensions
功能中添加字段,而不是修改传入的事件正文。TriggerBinding
资源可以使用$(extensions.<key>)
语法访问这个新extensions
功能中的值。更新您的绑定,使用$(extensions.<key>)
语法而不是$(body.<overlay-key>)
语法。 -
把
"
替换为\"
的参数转义行为现在已被删除。如果您需要保留旧的转义参数行为,请在TriggerTemplate
规格中添加tekton.dev/old-escape-quotes: true"
注解。 -
您可以使用触发器中的
name
和value
字段,或事件监听程序来嵌入TriggerBinding
资源。但是,您无法为单个绑定指定name
和ref
字段。使用ref
字段引用TriggerBinding
资源以及内嵌绑定的name
字段。 -
拦截器无法试图引用
EventListener
资源命名空间以外的secret
。您必须在 'EventListener' 资源的命名空间中包含 secret。 -
在 Triggers 0.9.0 及之后的版本中,如果基于正文或标头的
TriggerBinding
参数在事件有效负载中缺失或格式不正确,则使用默认值而不是显示错误。 -
通过使用 Tekton Pipelines 0.16.x 的
WhenExpression
对象创建的任务和管道必须重新应用来修复它们的 JSON 注解。 - 当管道接受一个可选的工作区,并将其提供给某个任务时,如果未提供工作区,管道会运行停止。
- 要在断开连接的环境中使用 Buildah 集群任务,请确保 Dockerfile 使用作为基础镜像的内部镜像流,然后使用与任何 S2I 集群任务相同的方法。
3.1.3.4. 修复的问题
-
CEL 拦截器添加的扩展通过在事件正文中添加
Extensions
字段传递给 Webhook 拦截器。 -
现在,日志读取器的活动超时可以使用
LogOptions
字段进行配置。但是,10 秒的默认超时行为会被保留。 -
当一个任务运行或管道运行完成后,
log
命令会忽略--follow
标记,它会读取可用的日志而不是实时的日志。 -
对以下 Tekton 资源的引用现在标准化,并在
tkn
命令中的所有面向用户的信息中保持一致:EventListener
、TriggerBinding
、ClusterTriggerBinding
、Condition
和TriggerTemplate
。 -
在以前的版本中,如果您启动了使用
--use-taskrun <canceled-task-run-name>
、--use-pipelinerun <canceled-pipeline-run-name>
或--last
标记的、已被取消的任务运行或管道运行,新的运行将会被取消。这个程序漏洞现已解决。 -
现在,
tkn pr desc
命令已被改进,以便在管道有条件运行时不会失败。 -
当使用
--task
选项删除使用tkn tr delete
运行的任务时,且集群任务具有相同名称的集群任务存在时,集群任务运行的任务也会被删除。作为临时解决方案,使用TaskRefKind
字段过滤运行的任务。 -
tkn triggertemplate describe
命令在输出中只会显示apiVersion
值的一部分。例如,只显示triggers.tekton.dev
,而不是triggers.tekton.dev/v1alpha1
。这个程序漏洞现已解决。 - 在某些情况下,webhook 无法获取租期且无法正常工作。这个程序漏洞现已解决。
- 在 v0.16.3 中创建的带有 when 表达式的管道现在可以在 v0.17.1 及之后的版本中运行。升级后,您不需要重新应用之前版本中创建的管道定义,因为现在支持注解中第一个字母的大写和小写。
-
默认情况下,
leader-election-ha
字段为高可用性启用。当disable-ha
控制器标记设置为true
时,它会禁用高可用性支持。 - 现在,解决了重复云事件的问题。现在,只有在条件改变状态、原因或消息时才发送云事件。
-
当
PipelineRun
或TaskRun
spec 中没有服务帐户名称时,控制器会使用config-defaults
配置映射中的服务帐户名称。如果在config-defaults
配置映射中也缺少服务帐户名称,控制器现在会在 spec 中将其设置为default
。 - 现在,当同一个持久性卷声明用于多个工作区,但具有不同子路径时,支持验证是否与关联性偏好兼容。
3.1.4. Red Hat OpenShift Pipelines 技术预览 1.2 发行注记
3.1.4.1. 新功能
Red Hat OpenShift Pipelines 技术预览(TP)1.2 现在包括在 OpenShift Container Platform 4.6 中。Red Hat OpenShift Pipelines TP 1.2 更新为支持:
- Tekton Pipelines 0.16.3
-
Tekton
tkn
CLI 0.13.1 - Tekton Triggers 0.8.1
- 基于 Tekton Catalog 0.16 的集群任务
- OpenShift Container Platform 4.6 中的 IBM Power Systems
- OpenShift Container Platform 4.6 上的 IBM Z 和 LinuxONE
除了包括修复和稳定性改进的信息外,以下小节突出介绍了 Red Hat OpenShift Pipelines 1.2 中的新内容。
3.1.4.1.1. Pipelines
此 Red Hat OpenShift Pipelines 发行版本添加了对断开连接的安装的支持。
注意IBM Power Systems、IBM Z 和 LinuxONE 目前不支持在受限环境中安装。
-
现在,您可以使用
when
字段而不是conditions
资源,仅在满足特定条件时运行任务。WhenExpression
资源的关键组件是Input
、Operator
和Values
。如果所有表达式都评估的结果都为True
, 则任务运行。如果表达式评估的结果为False
,则任务被跳过。 - 现在,如果某个任务运行被取消或超时,则步骤(Step)状态被更新。
-
现在,支持 Git 大文件存储(LFS)来使用
git-init
构建基础镜像。 -
现在,当某个任务嵌入到管道中时,您可以使用
taskSpec
字段来指定元数据,如标识(label)和注解(annotation)。 -
现在,Pipeline 运行支持云事件。现在,对于云事件管道资源发送的带有
backoff
的云事件会进行重试。 -
现在,可以为声明了
Task
、但没有明确指定TaskRun
资源的工作区(workspace)设置一个默认的Workspace
配置。 -
支持
PipelineRun
命名空间和TaskRun
命名空间的命名空间变量插入。 -
现在,添加了对
TaskRun
对象的验证,以检查当TaskRun
资源与 Affinity Assistant 关联时,是否使用一个以上的持久性卷声明工作区。如果使用多个持久性卷声明工作区,则任务运行会失败,并且有一个TaskRunValidationFailed
条件。请注意,默认情况下, Affinity Assistant 在 Red Hat OpenShift Pipelines 中被禁用,因此您需要启用 Affinity Assistant 来使用它。
3.1.4.1.2. Pipelines CLI
tkn task describe
、tkn taskrun describe
、tkn clustertask describe
、tkn pipeline describe
和tkn pipelinerun describe
命令现在:-
如果存在其中之一,会自动选择
Task
、TaskRun
、ClusterTask
、Pipeline
和PipelineRun
。 -
在相应的输出中显示
Task
、TaskRun
、ClusterTask
、Pipeline
和PipelineRun
资源的结果。 -
在相应的输出中显示
Task
、TaskRun
、ClusterTask
、Pipeline
和PipelineRun
资源中声明的工作区。
-
如果存在其中之一,会自动选择
-
现在,您可以使用
tkn clustertask start
命令的--prefix-name
选项指定任务运行名称前缀。 -
现在为
tkn clustertask start
命令提供了互动模式支持。 -
现在,您可以使用
TaskRun
和PipelineRun
对象的本地或远程文件定义指定管道支持的PodTemplate
属性。 -
现在,您可以在
tkn clustertask start
命令中使用--use-params-defaults
选项,使用ClusterTask
配置中设置的默认值并创建任务运行。 -
现在,如果有些参数没有指定默认值,
tkn pipeline start
命令的--use-param-defaults
标志会提示以互动模式提供。
3.1.4.1.3. 触发器
-
添加了一个名为
parseYAML
的通用表达语言(CEL)函数,用来将 YAML 字符串解析为一个映射的字符串。 - 在评估表达式和解析 hook 正文以创建评估环境时,改进了解析 CEL 表达式的错误消息,使其更加精细。
- 现在,可以支持 marsing 布尔值和映射,如果它们被用作 CEL 覆盖机制中的表达式值。
在
EventListener
对象中添加了以下字段:-
replicas
字段通过在 YAML 文件中指定副本数,使事件监听程序能够运行多个 pod。 -
NodeSelector
字段使EventListener
对象能够将事件监听器 pod 调度到特定的节点。
-
-
Webhook 拦截器现在可以解析
EventListener-Request-URL
标头,从事件监听器处理的原始请求 URL 中提取参数。 - 现在,事件监听器的注解可以被传播到部署、服务和其他 pod。请注意,服务或部署的自定义注解将被覆盖,因此必须在事件监听程序注解中添加它们以便传播它们。
-
现在,当用户将
spec.replicas
值指定为负数
或零
时,可以正确验证EventListener
规格中的副本。 -
现在,您可以在
EventListener
spec 中指定TriggerCRD
项,作为一个使用TriggerRef
项的引用来独立创建TriggerCRD
项,然后在EventListener
spec 中绑定它。 -
现在,提供了对
TriggerCRD
对象的验证和默认值。
3.1.4.2. 已弃用的功能
-
$(params)
参数现已从triggertemplate
资源中删除,由$(tt.params)
替代,以避免resourcetemplate
和triggertemplate
资源参数间的混淆。 -
基于可选的基于
EventListenerTrigger
的身份验证级别的ServiceAccount
引用,已从对象引用改为一个ServiceAccountName
字符串。这样可确保ServiceAccount
引用与EventListenerTrigger
对象位于同一个命名空间中。 -
Conditions
自定义资源定义(CRD)现已弃用,已使用WhenExpressions
CRD 替代。 -
PipelineRun.Spec.ServiceAccountNames
对象已启用,被PipelineRun.Spec.TaskRunSpec[].ServiceAccountName
对象替代。
3.1.4.3. 已知问题
- 此 Red Hat OpenShift Pipelines 发行版本添加了对断开连接的安装的支持。但是,集群任务使用的一些镜像必须进行镜像(mirror)才能在断开连接的集群中工作。
-
在卸载 Red Hat OpenShift Pipelines Operator 后,
openshift
命名空间中的管道不会被删除。使用oc delete pipelines -n openshift --all
命令删除管道。 卸载 Red Hat OpenShift Pipelines Operator 不会删除事件监听程序。
作为临时解决方案,删除
EventListener
和Pod
CRD:使用
foregroundDeletion
终结器编辑EventListener
对象:$ oc patch el/<eventlistener_name> -p '{"metadata":{"finalizers":["foregroundDeletion"]}}' --type=merge
例如:
$ oc patch el/github-listener-interceptor -p '{"metadata":{"finalizers":["foregroundDeletion"]}}' --type=merge
删除
EventListener
CRD:$ oc patch crd/eventlisteners.triggers.tekton.dev -p '{"metadata":{"finalizers":[]}}' --type=merge
当您运行多架构容器镜像任务时,如果在 IBM Power Systems(ppc64le)或 IBM Z(s390x)集群上没有命令规格,则
TaskRun
资源会失败,并显示以下错误:Error executing command: fork/exec /bin/bash: exec format error
作为临时解决方案,使用特定架构的容器镜像或指定 sha256 摘要指向正确的架构。要获得 sha256 摘要,请输入:
$ skopeo inspect --raw <image_name>| jq '.manifests[] | select(.platform.architecture == "<architecture>") | .digest'
3.1.4.4. 修复的问题
- 现在,添加了一个简单的语法验证用于检查 CEL 过滤器、Webhook 验证器中的覆盖以及拦截器中的表达式。
- 触发器不再覆盖底层部署和服务对象上的注解。
-
在以前的版本中,事件监听器将停止接受事件。
EventListener
sink 增加了一个 120 秒的空闲超时来解决这个问题。 -
在以前的版本中,取消一个带有
Failed(Canceled)
状态的管道运行会给出一个成功信息。这个问题已被解决,现在在这种情况下会显示错误。 -
tkn eventlistener list
命令现在提供列出的事件监听器的状态,从而使您可以轻松地识别可用的事件。 -
现在,当没有安装触发器或没有找到资源时,
triggers list
和triggers describe
命令会显示一致的错误信息。 -
在以前的版本中,在云事件交付过程中会产生大量闲置连接。
DisableKeepAlives: true
参数添加到cloudeventclient
配置来修复这个问题。因此,会为每个云事件设置一个新的连接。 -
在以前的版本中,
creds-init
代码也会向磁盘写入空文件,即使未提供给定类型的凭证。在这个版本中,creds-init
代码只为从正确注解的 secret 中挂载的凭证写入文件。
3.1.5. Red Hat OpenShift Pipelines 技术预览 1.1 发行注记
3.1.5.1. 新功能
Red Hat OpenShift Pipelines 技术预览(TP)1.1 现在包括在 OpenShift Container Platform 4.5 中。Red Hat OpenShift Pipelines TP 1.1 更新为支持:
- Tekton Pipelines 0.14.3
-
Tekton
tkn
CLI 0.11.0 - Tekton Triggers 0.6.1
- 基于 Tekton Catalog 0.14 的集群任务
除了包括修复和稳定性改进的信息外,以下小节突出介绍了 Red Hat OpenShift Pipelines 1.1 中的新内容。
3.1.5.1.1. Pipelines
- 现在可以使用工作区而不是管道资源。建议您在 OpenShift Pipelines 中使用 Workspaces 而不是 PipelineResources,因为 PipelineResources 很难调试,范围有限,且不容易重复使用。如需有关 Workspaces 的更多信息,请参阅了解 OpenShift Pipelines。
添加了对卷声明模板的工作空间支持:
- 管道运行和任务运行的卷声明模板现在可以添加为工作区的卷源。然后,tkton-controller 使用模板创建一个持久性卷声明(PVC),该模板被视为管道中运行的所有任务的 PVC。因此,您不需要在每次绑定多个任务的工作空间时都定义 PVC 配置。
- 当卷声明模板用作卷源时,支持使用变量替换来查找 PVC 名称。
支持改进的审核:
-
PipelineRun.Status
字段现在包含管道中运行的每个任务的状态,以及用于实例化用于监控管道运行进度的管道规格。 -
Pipeline 结果已添加到 pipeline 规格和
PipelineRun
状态中。 -
TaskRun.Status
字段现在包含用于实例化TaskRun
资源的具体任务规格。
-
- 支持在条件中应用默认参数。
-
现在,通过引用集群任务创建的任务运行会添加
tekton.dev/clusterTask
标签,而不是tekton.dev/task
标签。 -
kube config writer 现在在资源结构中添加了
ClientKeyData
和ClientCertificateData
配置,以便使用 kubeconfig-creator 任务替换 pipeline 资源类型集群。 -
现在,
feature-flags
和config-defaults
配置映射的名称可以自定义。 - 现在,在任务运行使用的 pod 模板中支持主机网络。
- 现在,可以使用 Affinity Assistant 支持任务运行中共享工作空间卷的节点关联性。默认情况下,这在 OpenShift Pipelines 上被禁用。
-
Pod 模板已更新,使用
imagePullSecrets
指定在启动一个 pod 时,容器运行时用来拉取容器镜像的 secret。 - 如果控制器无法更新任务运行,则支持从任务运行控制器发出警告事件。
- 在所有资源中添加了标准或者推荐的 k8s 标签,以标识属于应用程序或组件的资源。
-
现在,
Entrypoint
进程被通知有信号,然后这些信号会使用一个Entrypoint
进程的专用 PID 组来传播这些信号。 - pod 模板现在可以在运行时使用任务运行 specs 在任务级别设置。
支持放出 Kubernetes 事件:
-
控制器现在会为其他任务运行生命周期事件发出事件 -
taskrun started
和taskrun running
。 - 频道运行控制器现在会在管道每次启动时放出一个事件。
-
控制器现在会为其他任务运行生命周期事件发出事件 -
- 除了默认的 Kubernetes 事件外,现在还提供对任务运行的支持。可将控制器配置为发送任何任务运行事件(如创建、启动和失败)作为云事件。
-
支持使用
$context.<task|taskRun|pipelineRun>.name
变量来引用管道运行和任务运行时的适当名称。 - 现在提供了管道运行参数的验证,以确保管道运行提供了管道所需的所有参数。这也允许管道运行在所需参数之外提供额外的参数。
-
现在,您可以使用管道 YAML 文件中的
finally
字段指定管道中的任务,这些任务会在管道退出前始终执行。 -
git-clone
集群任务现在可用。
3.1.5.1.2. Pipelines CLI
-
tkn dlistener describe
命令现在可以支持内嵌触发器绑定。 - 支持在使用不正确的子命令时推荐子命令并给出建议。
-
现在,如果管道中只有一个任务存在,
tkn task describe
命令会自动选择该任务。 -
现在您可以使用默认参数值启动任务,方法是在
tkn task start
命令中指定--use-param-defaults
标记。 -
现在,您可以使用
tkn pipeline start
或tkn task start
命令的--workspace
选项为管道运行或任务指定卷声明模板。 -
tkn pipelinerun logs
命令现在会显示finally
部分中列出的最终任务的日志。 -
现在,为
tkn task start
命令提供了互动模式支持,并为以下tkn
资源提供describe
子命令:pipeline
,PipelineRun
、task
、taskrun
、clustertask
和pipelineresource
。 -
tkn version
命令现在显示集群中安装的触发器版本。 -
tkn pipeline describe
命令现在显示为频道中使用的任务指定的参数值和超时。 -
添加了对
tkn pipelinerun describe
和tkn taskrun describe
命令的--last
选项的支持,以分别描述最新的频道运行或任务运行。 -
tkn pipeline describe
命令现在显示管道中适用于任务的条件。 -
现在,您可以在
tkn resource list
命令中使用--no-headers
和--all-namespaces
标记。
3.1.5.1.3. 触发器
现在以下通用表达式语言(CEL)功能可用:
-
parseURL
用来解析和提取一个 URL 的部分内容 -
parseJSON
用来解析嵌入在deployment
webhook 中的payload
字段中的字符串中的 JSON 值类型
-
- 添加了来自 Bitbucket 的 webhook 的新拦截器。
-
现在,在使用
kubectl get
列出时,事件监听器会显示Address URL
和Available status
作为额外的项。 -
触发器模板参数现在使用
$(tt.params.<paramName>)
语法而不是$(params.<paramName>)
来减少触发器模板和资源模板参数之间的混淆。 -
现在,您可以在
EventListener
CRD 中添加容限
,以确保事件监听程序使用相同的配置,即使所有节点都因为安全或管理问题而产生污点也是如此。 -
现在,您可以在
URL/live
中为事件监听器添加就绪探测(Readiness Probe)。 -
现在,添加了对在事件监听器触发器中嵌入
TriggerBinding
规格的支持。 -
触发器资源现在附带推荐的
app.kubernetes.io
标签注解。
3.1.5.2. 已弃用的功能
本发行版本中已弃用了以下内容:
-
所有集群范围命令(包括
clustertask
和clustertriggerbinding
命令)的--namespace
或-n
标志都已弃用。它将在以后的发行版本中被删除。 -
事件监听器中的
triggers.bindings
中的name
字段已弃用。现在使用ref
字段替代,并将在以后的发行版本中删除。 -
使用
$(params)
的触发器模板中的变量插值已经被弃用,现在使用$(tt.params)
来减少与管道变量插入语法的混乱。在以后的发行版本中会删除$(params.<paramName>)
语法。 -
在集群任务中弃用了
tekton.dev/task
标签。 -
TaskRun.Status.ResourceResults.ResourceRef
字段已弃用,并将被删除。 -
tkn pipeline create
、tkn task create
和tkn resource create -f
子命令已被删除。 -
从
tkn
命令中删除了命名空间验证。 -
tkn ct start
命令中的默认超时时间(1h
)以及-t
标志已被删除。 -
s2i
集群任务已弃用。
3.1.5.3. 已知问题
- 条件(Conditions)不支持工作区。
-
tkn clustertask start
命令不支持--workspace
选项和互动模式。 -
支持
$(params.<paramName>)
语法的向后兼容性会强制您使用带有特定管道参数的触发器模板,因为触发器 s Webhook 无法将触发器参数与管道参数区分开。 -
当针对
tekton_taskrun_count
和tekton_taskrun_duration_seconds_count
运行一个 promQL 查询时,Pipeline metrics 会报告不正确的值。 -
当为一个工作区指定了一个不存在的 PVC 名称时,管道运行和任务运行会维持在
Running
和Running(Pending)
的状态。
3.1.5.4. 修复的问题
-
在以前的版本中,如果任务和集群任务的名称是相同的,则
tkn task delete <name> --trs
命令会同时删除 Task 和 ClusterTask。在这个版本中,该命令只删除任务<name>
创建的任务运行。 -
以前,
tkn pr delete -p <name> --keep 2
命令会在使用--keep
是忽略-p
标志,并将删除除最后两个以外的所有管道运行。在这个版本中,命令只删除由管道<name>
创建的管道运行,但最后两个除外。 -
tkn triggertemplate describe
输出现在以表格式而不是 YAML 格式显示资源模板。 -
在以前的版本中,当一个新用户添加到容器时,
buildah
集群任务会失败。在这个版本中,这个问题已被解决。
3.1.6. Red Hat OpenShift Pipelines 技术预览 1.0 发行注记
3.1.6.1. 新功能
Red Hat OpenShift Pipelines 技术预览(TP)1.0 现在包括在 OpenShift Container Platform 4.4 中。Red Hat OpenShift Pipelines TP 1.0 更新为支持:
- Tekton Pipelines 0.11.3
-
Tekton
tkn
CLI 0.9.0 - Tekton Triggers 0.4.0
- 基于 Tekton Catalog 0.11 的集群任务
除了包括修复和稳定性改进的信息外,以下小节突出介绍了 Red Hat OpenShift Pipelines 1.0 中的新内容。
3.1.6.1.1. Pipelines
- 支持 v1beta1 API 版本。
- 支持改进的限制范围。在以前的版本中,限制范围仅为任务运行和管道运行指定。现在不需要显式指定限制范围。使用命名空间中的最小限制范围。
- 支持使用任务结果和任务参数在任务间共享数据。
-
现在,管道可以被配置为不覆盖
HOME
环境变量和步骤的工作目录。 -
与任务步骤类似,
sidecar
现在支持脚本模式。 -
现在,您可以在任务运行
podTemplate
资源中指定不同的调度程序名称。 - 支持使用 Star Array Notation 替换变量。
- Tekton 控制器现在可以配置为监控单个命名空间。
- 现在,在管道、任务、集群任务、资源和条件规格中添加了一个新的 description 字段。
- 在 Git pipeline 资源中添加代理参数。
3.1.6.1.2. Pipelines CLI
-
现在为以下
tkn
资源添加了describe
子命令:EventListener
、Condition
、triggerTemplate
、ClusterTask
和TriggerSBinding
。 -
在以下资源中添加
v1beta1
支持以及v1alpha1
的向后兼容性:ClusterTask
、Task
、Pipeline
、PipelineRun
和TaskRun
。 以下命令现在可以使用
--all-namespaces
标志选项列出所有命名空间的输出结果:tkn task list
、tkn pipeline list
、tkn taskrun list
和tkn pipelinerun list
这些命令的输出也可以通过
--no-headers
选项在没有标头的情况下显示信息。-
现在您可以使用默认参数值启动管道,方法是在
tkn pipelines start
命令中指定--use-param-defaults
标记。 -
现在,在
tkn pipeline start
和tkn task start
命令中增加了对工作区的支持。 -
现在增加了一个新命令
clustertriggerbinding
,它带有以下子命令:describe
、delete
和list
。 -
现在,您可以使用本地或远程
yaml
文件直接启动管道运行。 -
describe
子命令现在显示一个改进的详细输出。现在,除了新的项,如description
、timeout
、param description
和sidecar status
,命令输出还提供了关于一个特定tkn
资源的更详细的信息。 -
现在,如果命名空间中只有一个任务,
tkn task log
命令会直接显示日志。
3.1.6.1.3. 触发器
-
现在触发器可以同时创建
v1alpha1
和v1beta1
管道资源。 -
支持新的通用表达式语言(CEL)拦截器功能 -
compareSecret
。此功能安全地将字符串与 CEL 表达式中的 secret 进行比较。 - 支持在事件监听器触发器级别进行身份验证和授权。
3.1.6.2. 已弃用的功能
本发行版本中已弃用了以下内容:
Steps
规格中的环境变量$HOME
,变量workingDir
已被弃用,并可能在以后的发行版本中有所变化。目前,在Step
容器中,HOME
和workingDir
变量会分别被/tekton/home
和/workspace
变量覆盖。在以后的发行版本中,这两个字段将不会被修改,它将被设置为容器镜像和
Task
YAML 中定义的值。在本发行版本中,使用disable-home-env-overwrite
和disable-working-directory-overwrite
标记来禁用覆盖HOME
和workingDir
变量。-
以下命令已弃用,并可能在以后的发行版本中删除:
tkn pipeline create
、tkn task create
。 -
在
tkn resource create
命令中使用-f
标志现已弃用。以后的发行版本中可能会删除它。 -
tkn clustertask create
命令中的-t
标记和--timeout
标记(使用秒格式)现已被弃用。现在只支持持续超时格式,例如1h30s
。这些已弃用的标记可能会在以后的版本中删除。
3.1.6.3. 已知问题
- 如果您要从 Red Hat OpenShift Pipelines 的旧版本升级,则必须删除您现有的部署,然后再升级到 Red Hat OpenShift Pipelines 版本 1.0。要删除现有的部署,您必须首先删除自定义资源,然后卸载 Red Hat OpenShift Pipelines Operator。如需了解更多详细信息,请参阅卸载 Red Hat OpenShift Pipelines 部分。
-
提交相同的
v1alpha1
任务多次会导致错误。在重新提交一个v1alpha1
任务时,使用oc replace
命令而不是oc apply
。 当一个新用户添加到容器时,
buildah
集群任务无法正常工作。当安装 Operator 时,
buildah
集群任务的--storage-driver
标志没有指定,因此它会被设置为默认值。在某些情况下,这会导致存储驱动程序设置不正确。当添加一个新用户时,错误的 storage-driver 会造成buildah
集群任务失败并带有以下错误:useradd: /etc/passwd.8: lock file already used useradd: cannot lock /etc/passwd; try again later.
作为临时解决方案,在
buildah-task.yaml
文件中手工把--storage-driver
标识的值设置为overlay
:以
cluster-admin
身份登录到集群:$ oc login -u <login> -p <password> https://openshift.example.com:6443
使用
oc edit
命令编辑buildah
集群任务:$ oc edit clustertask buildah
buildah
clustertask YAML 文件的最新版本会在由EDITOR
环境变量指定的编辑器中打开。在
Steps
字段中找到以下command
字段:command: ['buildah', 'bud', '--format=$(params.FORMAT)', '--tls-verify=$(params.TLSVERIFY)', '--layers', '-f', '$(params.DOCKERFILE)', '-t', '$(resources.outputs.image.url)', '$(params.CONTEXT)']
使用以下内容替换
command
字段:command: ['buildah', '--storage-driver=overlay', 'bud', '--format=$(params.FORMAT)', '--tls-verify=$(params.TLSVERIFY)', '--no-cache', '-f', '$(params.DOCKERFILE)', '-t', '$(params.IMAGE)', '$(params.CONTEXT)']
- 保存文件并退出。
另外,您还可以直接在 web 控制台中直接修改
buildah
集群任务 YAML 文件:进入 PipelinesCluster Tasks buildah。从 Actions 菜单中选择 Edit Cluster Task,如前所示替换 command
项。
3.1.6.4. 修复的问题
-
在以前的版本中,即使镜像构建已在进行中,
DeploymentConfig
任务也会触发新的部署构建。这会导致管道部署失败。在这个版本中,deploy task
命令被oc rollout status
命令替代,它会等待正在进行中的部署完成。 -
现在在管道模板中添加了对
APP_NAME
参数的支持。 -
在以前的版本中,Java S2I 的管道模板无法在 registry 中查找镜像。在这个版本中,使用现有镜像管道资源而不是用户提供的
IMAGE_NAME
参数来查找镜像。 - 所有 OpenShift Pipelines 镜像现在都基于 Red Hat Universal Base Images(UBI)。
-
在以前的版本中,当管道在
tekton-pipelines
以外的命名空间中安装时,tkn version
命令会将管道版本显示为unknown
。在这个版本中,tkn version
命令会在任意命名空间中显示正确的管道版本。 -
tkn version
命令不再支持-c
标志。 - 非管理员用户现在可以列出集群触发器绑定。
-
现在为 CEL 拦截器修复了事件监听程序
CompareSecret
功能。 -
现在,当任务和集群任务的名称相同时,任务和集群任务的
list
、describe
和start
子命令可以正确地显示输出。 - 在以前的版本中,OpenShift Pipelines Operator 修改了特权安全性上下文约束 (SCC),这会在集群升级过程中造成错误。这个错误现已解决。
-
在
tekton-pipelines
命名空间中,现在将所有任务运行和管道运行的超时设置为使用配置映射的default-timeout-minutes
字段。 - 在以前的版本中,Web 控制台中的管道部分没有为非管理员用户显示。这个问题现已解决。