使用 Tekton Pipelines
Tekton Pipelines 是一个开源项目,可用于在 Kubernetes 集群中配置和运行持续集成和 Continuous Delivery 管道。 Tekton 管道在 yaml 文件中进行定义,这些文件通常存储在 Git 存储库中。
Tekton 为 Kubernetes 提供了一套 自定义资源扩展,用于定义管道。 这些扩展中包括以下 Tekton 管道基本资源:
资源 | 描述 |
---|---|
Task |
定义一组构建步骤,例如编译代码,运行测试以及构建和部署映像。 |
TaskRun |
使用特定输入,输出和执行参数实例化要执行的任务。 您可以自行启动任务,也可以作为管道的一部分启动任务。 |
Pipeline |
定义用于编写管道的任务集。 |
PipelineRun |
使用特定输入,输出和执行参数实例化用于执行的管道。 |
使用 Tekton Pipeline 时,可以利用以下功能:
- 云本机:Tekton 管道在 Kubernetes 上运行,将 Kubernetes 集群用作第一类类型,并将容器用作其构建块。
- 已解耦:可以使用一个管道部署到任何 Kubernetes 集群。 您可以隔离运行组成管道的任务。 还可以在管道运行之间切换资源(如 Git 存储库)。
- 类型化:可以切换特定类型资源(例如,映像)的实现。
Tekton Pipelines 项目是测试版。 对于每个新版本的 Tekton,必须更新管道。 有关 Tekton 最新版本的更多信息,请参阅 https://github.com/tektoncd/pipeline/releases.
IBM Cloud® Continuous Delivery 提供了两种类型的交付管道,可用于构建、测试和部署应用程序。
- 经典:经典交付管道以图形方式创建,其中状态会嵌入到管道图中。 这些管道可以在云中的共享工作程序上运行,也可以在您自己的 Kubernetes 集群上运行的专用工作程序上运行。
- Tekton:Tekton 交付管道在 yaml 文件中进行创建,这些文件会将管道定义为一组 Kubernetes 资源。 您可以编辑这些 yaml 文件来更改管道的行为。 Tekton 管道可在运行于自己集群上的私有工作者上运行。 他们还可以在公共云上的 IBM管理的工作程序上运行。 Tekton 集成提供了一个仪表板,可用于查看 Tekton 管道运行的状态并触发新的运行。 它还提供了用于指定管道触发器,管道定义,运行管道的工作程序以及管道属性的机制。
这两种类型的管道通过在单独的容器中运行以及使用您选择的映像,使作业或步骤相互隔离。 经典管道和 Tekton 管道都存在于 工具链中,并依赖该工具链添加更多用于构建、测试和部署流程的工具集成。
2020 年 11 月 20 日,Dockerhub 引入了对匿名镜像提取的速率限制。 此更改可能会影响正在运行引用 Dockerhub 托管的映像的任务的用户。 建议使用其他注册表,如 IBM Cloud Container Registry。
先决条件
添加并运行 Tekton 管道之前,请确保以下资源已就位:
-
包含以下工具集成的 工具链:
- 包含 Tekton 管道代码的存储库工具集成(例如,GitHub 工具集成),包括 Tekton yaml 文件。 在 GitHub上查找样本管道和任务定义。 有关 Tekton 管道入门的更多信息,请参阅 Tekton 管道。
- 可选。 如果您未使用缺省共享管道工作程序,那么可以使用引用 Kubernetes 集群的 Delivery Pipeline Private Worker 工具集成。 有关专用工作程序的更多信息,请参阅安装 Delivery Pipeline Private Worker。
-
已本地安装 IBM Cloud CLI。
-
kubectl 安装在本地。
-
Kubernetes 集群 (V 1.22 或更高版本),例如 IBM Cloud® Kubernetes Service 集群。
工具链和 Delivery Pipeline Private Worker 工具集成必须位于同一区域中。
使用控制台为 Tekton 创建 Delivery Pipeline
配置 Delivery Pipeline 工具集成时,可以选择要创建的管道类型。
-
如果您没有工具链,请选择模板以 创建工具链。 根据您所使用的模板,可能会有不同的字段可用。 请复查缺省字段值,如果必要,更改那些设置。
-
如果您有一个工具链并要将此工具集成添加到其中,请从IBM Cloud控制台单击菜单图标
>平台自动化>工具链。 在 "工具链 "页面,单击工具链打开其 "概述 "页面。 或者,在应用程序“概述”页面的“持续交付”卡上,单击查看工具链。 然后,单击概述。
-
将 Delivery Pipeline 集成添加到工具链:
a. 单击添加工具。
b. 在“工具集成”部分中,单击 Delivery Pipeline。
-
指定新管道的名称。
-
选择 Tekton 以创建 Tekton Delivery Pipeline。 您可以在定义的 Kubernetes 集群上查看 Tekton 管道运行的输出结果,并支持配置管道定义仓库、管道触发器、管道运行位置和简单机密。
-
如果您计划使用管道来部署用户界面,请选中在“查看应用程序”菜单中显示应用程序复选框。 管道所创建的所有应用程序都会显示在工具链“概述”页面上的查看应用程序列表中。
-
单击创建集成,以向工具链添加 Delivery Pipeline。
使用控制台为 Tekton 配置 Delivery Pipeline
-
从工具链的“概述”页面,在 交付管道 卡上,单击 Delivery Pipeline 以打开 Tekton Delivery Pipeline“概述”页面。
-
单击设置。 在“定义”部分,完成以下任务:
a. 指定包含 Tekton 管道定义和相关工件的 Git 存储库和 URL。 如果存储库不可用,请返回到“工具链概述”页面并添加存储库。
b. 在 Git 版本中选择要使用的分支,或键入一个标签。
c. 指定 Git 存储库中管道定义的路径。 可以引用同一存储库中的特定定义。 如果多个定义存储库与工具链集成,那么还可以添加这些存储库。
d. 保存更改。
将自动更新管道定义。
计算的管道定义大小限制为 1 MB。 如果在保存或运行管道时迂到错误,那么可能需要减小管道定义的大小,或者将其拆分为多个管道。
-
在 工作程序 部分中,选择要用于运行 Tekton 管道的 IBM 管理的共享工作程序或专用工作程序。 有关专用工作程序的更多信息,请参阅使用 Delivery Pipeline Private Worker。
专用工作程序必须在 Tekton 管道所在的工具链中进行定义。
-
在“环境属性”部分中,单击 添加 并选择属性类型以定义您自己的环境属性。 例如,可以定义
API_KEY
属性,该属性传递管道中所有脚本用于访问 IBM Cloud 资源的 API 密钥。 可以添加以下类型的属性:- 枚举: 具有可从用户定义的选项列表中选择的值的属性键。
- 安全值:带有单行值的属性密钥,使用 AES-128 加密。 此值使用星号字符显示。 或者,如果工具链中提供了此类工具,那么可以单击密钥图标以从保险库集成 (例如 IBM Key Protect) 中选择密钥。
- 文本值: 具有文本值的属性键,可以是单行或多行。 先前,单独的 文本区域 属性类型支持多行值。
- 工具集成: 具有在运行时从工具链工具集成解析的值的属性键。 缺省情况下,该值是工具集成的 JSON 字符串表示。 可以通过为可选 JSON 过滤器提供值来检索对象的特定字段或子集。 例如,如果选择了 GitHub 集成,并指定了 JSON 过滤器
parameters.repo_url
,当PipelineRun
资源运行时,该值将反映工具集成中配置的 Git repo 的 URL。
可以在 Tekton 管道资源中访问这些属性。 有关这些属性的更多信息,请参阅 Tekton Pipeline 环境和资源。
可以锁定属性以防止其被覆盖。 尝试在运行时覆盖锁定的属性将导致运行请求被拒绝。 缺省情况下,锁定的属性不会显示在运行侧面板中,但可以通过启用“显示所有属性”选项以只读方式显示。
-
单击保存。
-
在“管道概述”页面上,单击 添加 以创建触发器,选择要添加的触发器类型,并使触发器与事件侦听器相关联。 可用事件监听器列表包含管道代码库中定义的监听器。
触发器基于 Tekton 触发器定义。 Git repo 触发器使用它们所映射的事件监听器从传入的事件有效载荷中提取信息,并创建 资源。Kubernetes 这些资源将应用于 Tekton
PipelineRun
资源。触发式管道运行将并行运行,除非您配置触发器以使用
Limit concurrent runs
选项对运行进行序列化。 启用此选项后,您可以限制此触发器可启动的同时运行次数。 例如,如果最大限制设置为 1,那么一次仅为此触发器运行一个管道,任何其他管道都将以等待状态排队。 在自动取消后续请求之前,最多有 20 个运行(如果使用IBMManaged Workers,则为 5 个)处于等待状态。 默认情况下,在使用IBM托管工作程序时,所有定时触发器都只能并发运行一次单击运行管道按钮并选择触发器后,手动触发器就会运行。
Git 版本库触发器在指定的 版本和分支出现指定的 事件类型时运行。Git Git
您可以从 Tekton 管道资源访问交付到 Git 触发器的 Webhook 有效内容。 虽然确切的字段特定于 repo-specific,但 Webhook 有效内容的一般语法为
$(event.payloadFieldName)
。 必须先授权 Git 管理员访问相应的 Git 集成,然后才能创建 Webhook。 要授权 Git 管理访问权,请 配置并再次保存 Git 集成。定时触发器 在 CRON 值定义的调度时间运行。 定时触发器 的 CRON 表达式基于 UNIX crontab 语法,并且是由五个时间和日期字段组成的序列:
minute
,hour
,day of the month
,month
和day of the week
。 这些字段由格式为X X X X X
的空格分隔。 定时触发器的最大频率为每 5 分钟一次。 以下示例显示使用各种定时频率的字符串。*/5 * * * *
-触发器每 5 分钟运行一次。0 * * * *
- 触发器在每小时开始时运行。0 9 * 1 MON-FRI
-触发器在 1 月的每个工作日上午 9:00 运行。0 * * NOV,DEC 1
-触发器在 11 月和 12 月的星期一每小时运行一次。
当配置了秘密设置的 POST 请求发送到通用网络钩子 URL 时,通用网络钩子触发器就会运行。 通用网络钩子触发器为 POST 请求提供唯一的网络钩子 URL。
由于 PipelineRun UI 不会隐藏事件有效内容部分中的通用 Webhook 有效内容值,因此请勿在有效内容中包含敏感数据。 而是通过使用触发器属性 (例如,密码或 API 密钥) 来保护通用 Webhook 所需的任何数据。
您可以使用以下任何方法来保护通用 Webhook 触发器,以使用 Git,Slack 传出 Webhook,Artifactory Webhook 等:
- 令牌匹配以比较已保存的令牌和 POST 请求中传递的令牌。 受支持的令牌源包括头,查询或有效内容。 令牌匹配由 GitLab Webhook 和 Slack 传出 Webhook 使用。
- 有效内容摘要匹配以通过将 HMAC 十六进制摘要与保存的令牌配合使用来比较从摘要有效内容生成的签名和散列。 受支持的签名源可能包含头,查询或有效内容。 用户必须指定摘要算法。 有效内容摘要匹配由 GitHub Webhook 使用。
- Tekton 任务验证要求用户在其 Tekton 任务中验证 Webhook 请求。
指定以下值以将通用 Webhook 触发器与 GitHub Webhook 配合使用:
- 保护:
Payload Digest Matches
- 签名源:
Header
- 头键名称:
X-Hub-Signature
- 摘要算法:
sha1
。
指定以下值以将通用 Webhook 触发器与 GitLab Webhook 配合使用:
- 保护:
Token Matches
- 令牌源:
Header
- 头键名称:
X-Gitlab-Token
指定以下值以将通用 Webhook 触发器与 Slack 传出 Webhook 配合使用:
- 保护:
Token Matches
- 令牌源:
Payload
- JSON 属性名称/表单键:
token
以下示例显示如何将 curl 命令与使用
Token Matches
规则保护的通用 Webhook 配合使用:通用网络钩子 curl -X POST \ https://devops-api.us-south.devops.cloud.ibm.com/v1/tekton-webhook/588236be-749b-4c67-ae57-a561abbbc9a8/run/7e82880e-4223-4c98-8ca9-ef6df36bb6dc \ -H 'Content-Type: application/json' \ -H 'token: 48a0f92c0932890048596906a22ae189c48c5619fbcf9600' \ -d '{ "somekey": "somevalue" }'
要获取管道定义中的有效内容值,请使用派生自事件的值指定 Triggerbinding 参数:
apiVersion: tekton.dev/v1beta1 kind: TriggerBinding metadata: name: binding spec: params: - name: somekey value: $(event.somekey)
保存更改。
此外,通用网络钩子触发器还支持在网络钩子请求正文中传递属性。 这样就可以覆盖 PipelineRun 的属性(由 webhook 触发),或传递附加属性以补充 PipelineRun 中使用的管道/触发器属性。
如果需要在有效载荷属性中传递敏感数据(如密码或 API 密钥秘密),则应为此类属性使用属性类型
SECURE
,这样它们就不会以纯文本形式显示在用户界面中。此外,还可以在请求体中传递一个可选的描述,描述所触发的 PipelineRun,并在浏览器中查看 PipelineRun 详细信息时显示在用户界面中。
下面的示例展示了如何在通用网络钩子中使用 curl 命令,同时传递文本属性、安全属性和说明:
curl -X POST \ https://devops-api.us-south.devops.cloud.ibm.com/v1/tekton-webhook/588236be-749b-4c67-ae57-a561abbbc9a8/run/7e82880e-4223-4c98-8ca9-ef6df36bb6dc \ -H 'Content-Type: application/json' \ -H 'token: 48a0f92c0932890048596906a22ae189c48c5619fbcf9600' \ -d '{ "description":"This text can be used to describe the PipelineRun that will be triggered by this request.", "properties":[ {"name":"mytextprop","type":"TEXT","value":"my text value"}, {"name":"mysecureprop","type":"SECURE","value":"mysecret"} ] }'
为 Tekton 管道配置 Delivery Pipeline 触发器
您可以根据 Git repo 中的各种事件为 Tekton 管道配置触发器。 使用以下选项过滤 Git 触发器:
- 分支:当指定事件发生时,触发所选软件包特定分支的管道。
- 模式:当指定事件发生时,根据所选软件包中标签和分支名称的全局匹配触发管道。
- CEL 过滤器:当事件与提供的通用表达式语言(CEL)过滤器匹配时触发管道。
使用分支和模式选项指定事件,如 "commit push
、"pull request opened
"、"updated
“或”closed
。 此外,你还可以通过切换“包含草稿拉取请求事件”选项来指定拉取请求事件,以允许或跳过草稿拉取请求的管道触发器。
同样,你也可以使用 "包括来自分叉的拉取请求事件切换来指定是否允许管道触发来自分叉版本库的拉取请求。 此外,您还可以选择“标签筛选器”选项,根据筛选器表中用户定义的标准,启用基于拉取请求标签的筛选。
CEL 过滤器选项支持更高级的用例,例如与事件有效载荷中的其他字段进行匹配。 该选项支持推送事件、所有拉取请求事件、问题事件、问题注释事件和发布事件。 该选项也是通用网络钩子触发器的可选功能,可根据网络钩子有效载荷提供事件过滤功能。
CEL 概览
CEL 是一种强大而灵活的表达式语言,旨在以简明易读的方式评估条件和执行验证。 CEL 非常适合需要复杂条件逻辑的用例,如过滤事件。
Tekton 管道中引入了 CEL 选项,以提供更强大、更灵活的事件过滤功能。 网络钩子有效载荷将根据用户提供的 CEL 表达式进行评估。 如果 CEL 表达式求值为 true
,就会触发管道运行。
CEL 支持以下功能:
- 算术运算符 (
+
,-
,*
,/
,%
) - 比较运算符 (
=
,!=
,<
,>
,<=
,>=
) - 逻辑运算符 (
&&
,||
) - 字符串操作符(
contains
,matches
,startsWith
,endsWith
) - 集合运算符(
in
,!in
) - 变量(直接引用变量名)
- 字面量(支持字符串、数字、布尔值和空值等字面量)
CEL 包括以下扩展,为基本 CEL 语言提供更多功能:
Sets extension
以支持高级设置操作,并为事件过滤提供更多灵活性。 有关此扩展的更多信息,请参阅 Sets。matchesGlob
以便在将现有模式字段转换为新的 CEL 筛选器选项时提供兼容性。 建议使用本地 CELmatches
操作符进行更高级的正则表达式匹配。
有关 CEL 的更多信息,请参阅 CEL 文档。
转换为 CEL
完成以下步骤,将现有事件筛选选择转换为 CEL 表达式:
-
编辑要转换的 Git 触发器。
-
在 Trigger on 部分,选择 CEL filter 选项。
CEL 过滤器 以下元素会自动转换为等价的 CEL 表达式:
- 分支或图案
- 事件,如
commit push
、pull request opened
、updated
和closed
- 包括拉取请求事件草案
- 包括来自分叉的拉取请求事件
- 标签过滤器
CEL 过滤器 生成的 CEL 表达式会写入一个文本区域字段,您可以根据需要对其进行编辑。
由于通用 Webhook 触发器上不存在用于转换的过滤器,因此转换为 CEL 过滤器仅适用于 Git 触发器。
如果保存触发器时选择了 CEL 选项,则会用 CEL 表达式替换之前选择的事件。 如果在保存 CEL 过滤器选项后切换到分支或模式选项,则不会保存之前的事件选择。 不支持将 CEL 选项转换为分支或模式选项。
CEL 表达示例
以下示例是每个受支持的 Git 类型的常用 CEL 表达式:GitHub
、GitLab
和 BitBucket
。 您可以复制和修改这些示例,以满足您的要求。
GitHub 示例:
当针对指定分支打开或更新拉取请求时运行:
header['x-github-event'] == 'pull_request' &&
(body.action == 'opened' || body.action == 'synchronize') &&
body.pull_request.base.ref == 'main'
当提交推送到指定分支时运行:
header['x-github-event'] == 'push' && body.ref == 'refs/heads/main'
当提交推送到指定分支时运行,但当提交信息包含特定字符串时跳过:
header['x-github-event'] == 'push' &&
body.ref == 'refs/heads/main' &&
!body.head_commit.message.contains("skip run")
当包含指定字符串的注释被添加到拉取请求时运行:
header['x-github-event'] == 'issue_comment' &&
body.action == 'created' && has(body.issue.pull_request) &&
body.comment.body.contains('/lgtm')
当创建带有指定标签的问题时运行:
header['x-github-event'] == 'issues' &&
body.action == 'opened' &&
body.issue.labels.exists(label, label.name == 'urgent')
GitLab 示例:
当针对指定分支打开或更新合并请求时运行:
header['x-gitlab-event'] == 'Merge Request Hook' &&
(body.object_attributes.action == 'open' || body.object_attributes.action == 'update') &&
body.object_attributes.target_branch == 'main'
当提交推送到指定分支时运行:
header['x-gitlab-event'] == 'Push Hook' && body.ref == 'refs/heads/main'
当提交推送到指定分支时运行,但当提交信息包含特定字符串时跳过:
header['x-gitlab-event'] == 'Push Hook' &&
body.ref == 'refs/heads/main' &&
!body.object_attributes.last_commit.message("skip run")
当合并请求中添加了包含指定字符串的注释时运行:
header['x-gitlab-event'] == 'Note Hook' &&
body.object_attributes.noteable_type == 'MergeRequest' &&
body.object_attributes.action == 'create' &&
body.object_attributes.note.contains('/lgtm')
当创建带有指定标签的问题时运行:
header['x-gitlab-event'] == 'Issue Hook' &&
(body.object_attributes.action == 'open') &&
body.object_attributes.labels.exists(label, label.name == 'urgent')
BitBucket 示例:
当针对指定分支打开或更新拉取请求时运行:
(header['x-event-key'] == 'pullrequest:created' || header['x-event-key'] == 'pullrequest:updated') &&
body.pullrequest.destination.branch.name == 'main'
当提交推送到指定分支时运行:
header['x-event-key'] == 'repo:push' && body.push.changes[0].new.name == 'main'
当提交推送到指定分支时运行,但当提交信息包含特定字符串时跳过:
header['x-event-key'] == 'repo:push' &&
body.push.changes[0].new.name == 'main' &&
!body.push.changes[0].commits[0].message("skip run")
当包含指定字符串的注释被添加到拉取请求时运行:
header['x-event-key'] == 'pullrequest:comment_created' &&
body.comment.content.raw.contains('/lgtm')
当创建带有指定标签的问题时运行:
header['x-event-key'] == 'issue:created' &&
body.issue.kind == 'bug'
过滤器
过滤器允许用户根据特定条件完善拉取请求。 过滤器字段目前支持在拉取请求中指定标签,从而根据标签的存在与否控制管道的执行。 不过,它不会在添加或删除标签时触发流水线;相反,它会在允许执行流水线之前验证 PR 的标签。
工作方式:
- 如果 PR 事件发生(如新增提交),管道会检查 PR 上的标签。
- 如果 PR 符合标签条件(例如具有 "已批准 "标签),管道就会运行。
- 如果 PR 不符合标签条件,管道将不会执行。
示例配置
下面的截图显示了一个例子,触发器是为标签“已批准”和“已审核”配置的。
- 只有当两个标签都存在时,才会触发 PR 管道。
- 如果缺少其中一个标签,管道将无法运行。

检查事件有效载荷
在编写用于事件过滤的 CEL 表达式时,您必须了解将对表达式进行评估的 webhook 有效负载的结构和内容。 您可以从管道运行详细信息页面检查现有运行的有效载荷。
要查看事件有效载荷,请转到管道运行详细信息页面并单击 显示上下文。 您可以查看触发管道运行的原始 webhook 有效载荷,并确认 CEL 表达式的相关字段是否与您想要的条件相匹配。
使用 API 为 Tekton 创建 Delivery Pipeline
-
获取 IAM 不记名令牌。 或者,如果您正在使用 SDK,请 获取 IAM API 密钥,并使用环境变量设置客户机选项。
export CD_TEKTON_PIPELINE_APIKEY={api_key}
-
将 Delivery Pipeline 工具集成添加到工具链。
curl -X POST \ https://api.{region}.devops.cloud.ibm.com/toolchain/v2/toolchains/{toolchain_id}/tools \ -H 'Authorization: Bearer {iam_token}' \ -H 'Accept: application/json` \ -H 'Content-Type: application/json' \ -d '{ "tool_type_id": "pipeline", "parameters": { "name": "{tool_integration_name}", "type" : "tekton" } }'
const CdToolchainV2 = require('@ibm-cloud/continuous-delivery/cd-toolchain/v2'); ... (async () => { const toolchainService = CdToolchainV2.newInstance(); const pipelinePrototypeModel = { toolchainId: {toolchain_id}, toolTypeId: 'pipeline', name: {tool_integration_name}, type: "tekton" }; const pipelineTool = await toolchainService.createTool(pipelinePrototypeModel); })();
import ( "github.com/IBM/continuous-delivery-go-sdk/cdtoolchainv2" ) ... toolchainClientOptions := &cdtoolchainv2.CdToolchainV2Options{} toolchainClient, err := cdtoolchainv2.NewCdToolchainV2UsingExternalConfig(toolchainClientOptions) createPipelineToolOptions := toolchainClient.NewCreateToolOptions({toolchain_id}, "pipeline") createPipelineToolOptions.SetName({tool_integration_name}) createPipelineToolOptions.SetType("tekton") pipelineTool, response, err := toolchainClient.CreateTool(createPipelineToolOptions)
from ibm_continuous_delivery.cd_toolchain_v2 import CdToolchainV2 ... toolchain_service = CdToolchainV2.new_instance() pipeline_tool = toolchain_service.create_tool( name = {tool_integration_name}, toolchain_id = {toolchain_id}, tool_type_id = "pipeline", type = "tekton" )
import com.ibm.cloud.continuous_delivery.cd_toolchain.v2.CdToolchain; import com.ibm.cloud.continuous_delivery.cd_toolchain.v2.model.*; ... CdToolchain toolchainService = CdToolchain.newInstance(); CreateToolOptions createPipelineToolOptions = new CreateToolOptions.Builder() .name({tool_integration_name}) .toolchainId({toolchain_id}) .toolTypeId("pipeline") .type("tekton") .build(); Response<ToolchainToolPost> response = toolchainService.createTool(createPipelineToolOptions).execute(); ToolchainToolPost pipelineTool = response.getResult();
下表列出并描述了上一步中使用的每个变量。
用于将Delivery Pipeline工具与 API 集成的变量 变量 描述 {region}
工具链所在的区域,例如 us-south
。{tool_integration_name}
工具集成的名称,例如 ci-pipeline
。{toolchain_id}
要向其添加工具集成的工具链的标识。 {iam_token}
有效的 IAM 不记名令牌。 -
配置 Delivery Pipeline 以使用指定区域中的公共受管工作程序。
curl -X POST \ https://api.{region}.devops.cloud.ibm.com/pipeline/v2/tekton_pipelines \ -H 'Authorization: Bearer {iam_token}' \ -H 'Accept: application/json` \ -H 'Content-Type: application/json' \ -d '{ "id": "{pipeline_id}", "worker": { "id": "public" } }'
const CdTektonPipelineV2 = require('@ibm-cloud/continuous-delivery/cd-tekton-pipeline/v2'); ... (async () => { const tektonService = CdTektonPipelineV2.newInstance(); const workerIdentityModel = { id: 'public', }; const params = { id: {pipeline_id}, worker: workerIdentityModel, }; const res = await tektonService.createTektonPipeline(params); })();
import { "github.com/IBM/continuous-delivery-go-sdk/cdtektonpipelinev2" } ... cdTektonPipelineOptions := &cdtektonpipelinev2.CdTektonPipelineV2Options{} pipelineSvc, err = cdtektonpipelinev2.NewCdTektonPipelineV2UsingExternalConfig(cdTektonPipelineOptions) createTektonPipelineOptions := pipelineSvc.NewCreateTektonPipelineOptions( {pipeline_id} ) workerIdentityModel := &cdtektonpipelinev2.WorkerIdentity{ ID: core.StringPtr("public"), } createTektonPipelineOptions.SetWorker(workerIdentityModel) tektonPipeline, response, err := pipelineSvc.CreateTektonPipeline(createTektonPipelineOptions)
from ibm_continuous_delivery.cd_tekton_pipeline_v2 import CdTektonPipelineV2 ... pipeline_service = CdTektonPipelineV2.new_instance() worker_identity_model = { 'id': 'public', } response = pipeline_service.create_tekton_pipeline( id = {pipeline_id}, worker = worker_identity_model ) tekton_pipeline = response.get_result()
import com.ibm.cloud.continuous_delivery.cd_tekton_pipeline.v2.CdTektonPipeline; import com.ibm.cloud.continuous_delivery.cd_tekton_pipeline.v2.model.*; ... CdTektonPipeline pipelineSvc = CdTektonPipeline.newInstance(); WorkerIdentity workerIdentityModel = new WorkerIdentity.Builder() .id("public") .build(); CreateTektonPipelineOptions createTektonPipelineOptions = new CreateTektonPipelineOptions.Builder() .id({pipeline_id}) .worker(workerIdentityModel) .build(); Response<TektonPipeline> response = pipelineSvc.createTektonPipeline(createTektonPipelineOptions).execute(); TektonPipeline tektonPipeline = response.getResult();
下表列出并描述了上一步中使用的每个变量。
用于使用 API 配置Delivery Pipeline的变量 变量 描述 {region}
工具链所在的区域,例如 us-south
。{pipeline_id}
从创建管道工具集成的上一步返回的管道的标识。 {iam_token}
有效的 IAM 不记名令牌。
有关 Delivery Pipeline API 的更多信息,请参阅 API 文档。
使用 Terraform 为 Tekton 创建 Delivery Pipeline
-
要安装 Terraform CLI 并为 Terraform 配置 IBM Cloud 提供程序插件,请遵循 IBM Cloud® 上的 Terraform 入门 的教程。
-
创建名为
main.tf
的 Terraform 配置文件。 在此文件中,添加配置以使用 HashiCorp 配置语言创建管道。 有关使用此配置语言的更多信息,请参阅 Terraform 文档。管道必须属于工具链。 您还可以通过 使用 Terraform 创建工具链。
以下示例使用指定的 Terraform 资源创建工具链和管道。
data "ibm_resource_group" "group" { name = "default" } resource "ibm_cd_toolchain" "my_toolchain" { name = "terraform_toolchain" resource_group_id = data.ibm_resource_group.group.id } resource "ibm_cd_toolchain_tool_pipeline" "my_pipeline_tool" { parameters { name = "terraform-pipeline-integration" } toolchain_id = ibm_cd_toolchain.my_toolchain.id } resource "ibm_cd_tekton_pipeline" "my_tekton_pipeline" { worker { id = "public" } pipeline_id = ibm_cd_toolchain_tool_pipeline.my_pipeline_tool.tool_id }
有关
ibm_cd_toolchain_tool_pipeline
和ibm_cd_tekton_pipeline
资源的更多信息,请参阅 Terraform Registry 文档中的参数参考详细信息。 -
初始化 Terraform CLI (如果需要)。
terraform init
-
创建 Terraform 执行计划。 此计划汇总了为创建工具链而必须运行的所有操作。
terraform plan
-
应用 Terraform 执行计划。 Terraform 将执行所有必需的操作来创建工具链。
terraform apply
查看 Delivery Pipeline for Tekton
您可以使用控制台 UI,API 或 Terraform 来查看管道。
使用控制台查看 Delivery Pipeline
“Tekton Delivery Pipeline 概述”页面显示空表,直到至少添加一个触发器为止。 Tekton 管道运行后 (手动运行或作为外部事件的结果),此表显示与管道中的每个触发器相关联的最近运行的相关数据。 每行显示有关单个触发器的信息,并显示与该触发器关联的最近运行的图形。 还会显示诸如这些运行的成功或失败以及最近一次运行发生的时间之类的信息。 您还可以对每个触发器执行操作: 手动运行触发器,将其标记为收藏夹,编辑触发器,启用或禁用触发器,或者将其删除。 您还可以单击图形中的某个项以检查该单个
PipelineRun
的详细信息。 或者,您可以单击触发器名称以将 " PipelineRuns " 页面打开到与该触发器关联的每个 PipelineRun
。 还提供了相关信息,例如,每个 PipelineRun
的状态,触发器和持续时间。
管道运行可以处于以下任一状态:
- 暂挂: 已请求
PipelineRun
。 - 正在运行:
PipelineRun
正在集群上运行。 - 已成功:
PipelineRun
已在集群上成功完成。 - 失败:
PipelineRun
失败。 请查看运行的日志文件来确定原因。 - 已排队: 当工作程序容量可用时,将接受
PipelineRun
进行处理并运行。 - 正在等待:
PipelineRun
正在等待排队。 - 已取消:
PipelineRun
已由系统或用户取消。 当等待运行的次数超过允许的限制时,系统会取消 "PipelineRun
。 - 错误:
PipelineRun
包含阻止将其应用于集群的错误。 有关错误原因的更多信息,请参阅运行详细信息。
有关所选运行的详细信息,请单击表中的任何行以查看 Task
定义以及每个 PipelineRun
定义中的步骤。 还可以查看每个 Task
定义和步骤的状态、日志和详细信息,以及 PipelineRun
定义的总体状态。
PipelineRuns 及其日志的保留期取决于为 Continuous Delivery 服务实例选择的套餐。 专业计划下的泰克顿管道保留一年。 轻量套餐下的泰克顿管道保留 30 天。 要在保留期之后保留任何 PipelineRuns
,请在 PipelineRuns 部分中选择 操作> 下载** 以下载 .zip 文件。
使用 API 查看 Delivery Pipeline
-
获取 IAM 不记名令牌。 或者,如果您正在使用 SDK,请 获取 IAM API 密钥,并使用环境变量设置客户机选项。
export CD_TEKTON_PIPELINE_APIKEY={api_key}
-
获取管道数据。
curl -X GET \ https://api.{region}.devops.cloud.ibm.com/pipeline/v2/tekton_pipelines/{pipeline_id} \ -H 'Authorization: Bearer {iam_token}' \ -H 'Accept: application/json`
const CdTektonPipelineV2 = require('@ibm-cloud/continuous-delivery/cd-tekton-pipeline/v2'); ... (async () => { const pipelineSvc = CdTektonPipelineV2.newInstance(); const params = { id: {pipeline_id}, }; const res = await pipelineSvc.getTektonPipeline(params); })();
import { "github.com/IBM/continuous-delivery-go-sdk/cdtektonpipelinev2" } ... cdTektonPipelineOptions := &cdtektonpipelinev2.CdTektonPipelineV2Options{} pipelineSvc, err = cdtektonpipelinev2.NewCdTektonPipelineV2UsingExternalConfig(cdTektonPipelineOptions) getTektonPipelineOptions := pipelineSvc.NewGetTektonPipelineOptions( {pipeline_id} ) tektonPipeline, response, err := pipelineSvc.GetTektonPipeline(getTektonPipelineOptions)
from ibm_continuous_delivery.cd_tekton_pipeline_v2 import CdTektonPipelineV2 ... pipeline_service = CdTektonPipelineV2.new_instance() response = pipeline_service.get_tekton_pipeline( id = {pipeline_id} ) tekton_pipeline = response.get_result()
import com.ibm.cloud.continuous_delivery.cd_tekton_pipeline.v2.CdTektonPipeline; import com.ibm.cloud.continuous_delivery.cd_tekton_pipeline.v2.model.*; ... CdTektonPipeline pipelineSvc = CdTektonPipeline.newInstance(); GetTektonPipelineOptions getTektonPipelineOptions = new GetTektonPipelineOptions.Builder() .id({pipeline_id}) .build(); Response<TektonPipeline> response = pipelineSvc.getTektonPipeline(getTektonPipelineOptions).execute(); TektonPipeline tektonPipeline = response.getResult();
下表列出并描述了上一步中使用的每个变量。
变量 | 描述 |
---|---|
{region} |
管道所在的区域,例如 us-south 。 |
{pipeline_id} |
要查看的管道 ID。 |
{iam_token} |
有效的 IAM 不记名令牌。 |
使用 Terraform 查看 Delivery Pipeline
-
找到包含现有管道的
resource
块的 Terraform 文件 (例如,main.tf
)。 -
如果
output
块尚未包含块,请将其添加到 Terraform 文件中。以下示例中的
resource
描述了现有管道。output
块指示 Terraform 输出指定资源的属性。data "ibm_resource_group" "group" { name = "default" } resource "ibm_cd_toolchain" "my_toolchain" { name = "terraform_toolchain" resource_group_id = data.ibm_resource_group.group.id } resource "ibm_cd_toolchain_tool_pipeline" "my_pipeline_tool" { parameters { name = "terraform-pipeline-integration" } toolchain_id = ibm_cd_toolchain.my_toolchain.id } resource "ibm_cd_tekton_pipeline" "my_tekton_pipeline" { worker { id = "public" } pipeline_id = ibm_cd_toolchain_tool_pipeline.my_pipeline_tool.tool_id } output "my_tekton_pipeline_attributes" { value = ibm_cd_tekton_pipeline.my_tekton_pipeline }
有关
ibm_cd_toolchain_tool_pipeline
和ibm_cd_tekton_pipeline
资源的更多信息,请参阅 Terraform Registry 文档中的参数参考详细信息。 -
初始化 Terraform CLI (如果需要)。
terraform init
-
使用
refresh-only
选项应用 Terraform 执行计划。 Terraform 将刷新其状态并显示管道资源的属性。terraform apply -refresh-only -auto-approve
使用 API 删除 Delivery Pipeline
-
获取 IAM 不记名令牌。 或者,如果您正在使用 SDK,请 获取 IAM API 密钥,并使用环境变量设置客户机选项。
export CD_TEKTON_PIPELINE_APIKEY={api_key}
-
删除管道。
curl -X DELETE \ https://api.{region}.devops.cloud.ibm.com/toolchain/v2/toolchains/{toolchain_id}/tools/{pipeline_id} \ -H 'Authorization: Bearer {iam_token}'
const CdTektonPipelineV2 = require('@ibm-cloud/continuous-delivery/cd-tekton-pipeline/v2'); ... (async () => { const pipelineSvc = CdTektonPipelineV2.newInstance(); const params = { id: {pipeline_id}, }; const res = await pipelineSvc.deleteTektonPipeline(params); })();
import { "github.com/IBM/continuous-delivery-go-sdk/cdtektonpipelinev2" } ... cdTektonPipelineOptions := &cdtektonpipelinev2.CdTektonPipelineV2Options{} pipelineSvc, err = cdtektonpipelinev2.NewCdTektonPipelineV2UsingExternalConfig(cdTektonPipelineOptions) deleteTektonPipelineOptions := pipelineSvc.NewDeleteTektonPipelineOptions( {pipeline_id} ) response, err := pipelineSvc.DeleteTektonPipeline(deleteTektonPipelineOptions)
from ibm_continuous_delivery.cd_tekton_pipeline_v2 import CdTektonPipelineV2 ... pipeline_service = CdTektonPipelineV2.new_instance() response = pipeline_service.delete_tekton_pipeline( id={pipeline_id} )
import com.ibm.cloud.continuous_delivery.cd_tekton_pipeline.v2.CdTektonPipeline; import com.ibm.cloud.continuous_delivery.cd_tekton_pipeline.v2.model.*; ... CdTektonPipeline pipelineSvc = CdTektonPipeline.newInstance(); DeleteTektonPipelineOptions deleteTektonPipelineOptions = new DeleteTektonPipelineOptions.Builder() .id({pipeline_id}) .build(); Response<Void> response = pipelineSvc.deleteTektonPipeline(deleteTektonPipelineOptions).execute();
下表列出并描述了上一步中使用的每个变量。
变量 | 描述 |
---|---|
{region} |
工具链所在的区域,例如 us-south 。 |
{toolchain_id} |
包含要删除的管道的工具链的标识。 |
{pipeline_id} |
要删除的管道 ID。 |
{iam_token} |
有效的 IAM 不记名令牌。 |
使用 Terraform 删除 Delivery Pipeline
-
找到包含现有管道的
resource
块的 Terraform 文件 (例如,main.tf
)。以下示例中的
resource
描述了现有管道。data "ibm_resource_group" "group" { name = "default" } resource "ibm_cd_toolchain" "my_toolchain" { name = "terraform_toolchain" resource_group_id = data.ibm_resource_group.group.id } resource "ibm_cd_toolchain_tool_pipeline" "my_pipeline_tool" { parameters { name = "terraform-pipeline-integration" } toolchain_id = ibm_cd_toolchain.my_toolchain.id } resource "ibm_cd_tekton_pipeline" "my_tekton_pipeline" { worker { id = "public" } pipeline_id = ibm_cd_toolchain_tool_pipeline.my_pipeline_tool.tool_id }
-
从 Terraform 文件中除去
ibm_cd_toolchain_tool_pipeline
和ibm_cd_tekton_pipeline
resource
块。 -
初始化 Terraform CLI (如果需要)。
terraform init
-
创建 Terraform 执行计划。 此计划总结了为删除管道而必须运行的所有操作。
terraform plan
-
应用 Terraform 执行计划。 Terraform 将执行删除管道所需的所有操作。
terraform apply
查看 TaskRun pod 的详细信息
要查看有关特定 TaskRun
的底层 Kubernetes pod 的信息,请单击 Task
名称,然后单击 Pod。
您可以查看 pod 的详细信息以及工作程序报告的任何相关事件。 此信息可帮助您调试特定故障或确定运行期间的耗用时间。
了解有关 Tekton 管道和资源的更多信息
要了解有关 Tekton 管道的更多信息,请参阅 Tekton:Continuous Delivery和 IBM Cloud Continuous Delivery Tekton 管道工具和资源文章。
要了解有关可在管道中引用的 Tekton 任务的更多信息,请参阅 Open Toolchain Tekton Catalog。 此 GitHub 存储库包含一组可在 Tekton 管道中复用的任务。