Redian新闻
>
用 Tekton 在 Kubernetes 中编写你的第一条 CI/CD 流水线 | Linux 中国

用 Tekton 在 Kubernetes 中编写你的第一条 CI/CD 流水线 | Linux 中国

科技
 
导读:Tekton 是一个用于创建持续集成和持续交付(CI/CD)系统的 Kubernetes 原生开源框架。
本文字数:6507,阅读时长大约:8分钟

Tekton 是一个用于创建持续集成和持续交付(CI/CD)系统的 Kubernetes 原生开源框架。通过对底层实施细节的抽象,它还可以帮助你在多个云供应商或企业内部系统中进行端到端(构建、测试、部署)应用开发。

Tekton 介绍

Tekton🔗 github.com 最初被称为 Knative Build🔗 github.com,后来被重组为独立的开源项目,有自己的 治理组织🔗 cd.foundation,现在是属于 Linux 基金会🔗 www.linuxfoundation.org 的项目。Tekton 提供了一个集群内的容器镜像构建和部署工作流程,换句话说,它是一个 持续集成(continuous integration)(CI)和 持续交付(continuous delivery)(CD)服务。它由 Tekton 流水线和几个支持组件如 Tekton CLI、Triggers 和 Catalog 等组成。

Tekton 是一个 Kubernetes 原生应用。它在 Kubernetes 集群中作为扩展被安装和运行,由一套Kubernetes 定制化资源组成,定义了你为流水线创建和复用的构建块。由于 Tekton 是一种 Kubernetes 原生技术,所以它非常容易扩展。当你需要增加你的工作负载时,你只需向你的集群添加节点就可以了。由于其可扩展的设计和社区贡献的组件库,它也很容易定制。

对于需要 CI/CD 系统来开展工作的开发人员,和为其组织内的开发人员建立 CI/CD 系统的平台工程师,Tekton 是理想选择。

Tekton 组件

构建 CI/CD 流水线的过程非常复杂,因此 Tekton 为每一步都提供工具。以下是 Tekton 提供的主要组件:

◈ 流水线()Pipeline: 定义了一组 Kubernetes 自定义资源🔗 kubernetes.io,作为你用来组装 CI/CD 流水线的构建块。
◈ 触发器(Triggers):一种 Kubernetes 自定义资源,允许你根据从事件有效载荷中提取的信息来创建流水线。例如,你可以在每次创建 Git 仓库的合并请求时,触发流水线的实例化和执行。
◈ 命令行(CLI):提供一个名为 tkn 的命令行界面,你可以使用它从终端与 Tekton 进行交互。
◈ 仪表盘(Dashboard):是 Tekton 流水线的一个基于网页的图形界面,显示流水线的执行信息。
◈ 目录(Catalog):是一个高质量的、由社区贡献的 Tekton 构建块(任务、流水线等),可在你自己的流水线中使用。
◈ 中心(Hub):是一个基于网页的图形界面,用于访问 Tekton 目录。
◈ 操作员(Operator):是一种 Kubernetes 操作员模式🔗 operatorhub.io,你可以在 Kubernetes 集群中安装、更新、升级和删除 Tekton 项目。
◈ (Chains):是一个 Kubernetes 自定义资源定义(Custom Resource Definition)(CRD)控制器,使你可以在 Tekton 中处理供应链安全的问题。正在开发中。
◈ 结果(Results):旨在帮助用户对 CI/CD 工作负载历史进行逻辑分组,并将长期结果的存储从流水线控制器中分离出来。

Tekton 术语

Tekton terminology

◈ 步骤(Step):是 CI/CD 工作流程中最基本的实体,例如为 Python 网络应用程序运行一些单元测试或编译一个 Java 程序。Tekton 使用容器镜像执行每个步骤。
◈ 任务(Task)::kissing:* 是按特定顺序排列的步骤的集合。Tekton 以 Kubernetes 容器荚🔗 kubebyexample.com 的形式运行任务,其中每个步骤都成为 容器荚(pod) 中的一个运行容器。
◈ 流水线(Pipelines):是按特定顺序排列的任务的集合。Tekton 把所有任务连接成一个 有向无环图(directed acyclic graph)(DAG),并按顺序执行图。换句话说,它创建了一些 Kubernetes 容器荚,并确保每个容器荚按预期成功运行。

Tekton pipelines

◈ 流水线运行(PipelineRun):顾名思义,是一条流水线的具体执行。
◈ 任务运行(TaskRun):是一个任务的具体执行。你可以选择在流水线外运行一次任务运行,可以通过它查看任务中每个步骤执行的具体情况。

创建你的 CI/CD 流水线

开始使用 Tekton 的最简单方法是自己编写一个简单的流水线。如果你每天都在使用 Kubernetes,那你可能对 YAML 很熟悉,这正是 Tekton 流水线的定义方式。下面是一个克隆代码库的简单流水线的例子。

首先,创建一个 task.yaml 文件,用你喜欢的文本编辑器打开它。这个文件定义了你要执行的 步骤(Step)。在这个例子中,就是克隆一个仓库,所以我把这个步骤命名为 “clone”。该文件设置了一些环境变量,然后使用一个简单的 shell 脚本来执行克隆。

接下来是 任务(Task)。你可以把步骤看作是一个被任务调用的函数,而任务则设置步骤所需的参数和工作空间。

  1. apiVersion: tekton.dev/v1beta1
  2. kind: Task
  3. metadata:
  4.  name: git-clone
  5. spec:
  6.  workspaces:
  7.    - name: output
  8.      description: The git repo will be cloned onto the volume backing this Workspace.
  9.  params:
  10.    - name: url
  11.      description: Repository URL to clone from.
  12.      type: string
  13.    - name: revision
  14.      description: Revision to checkout. (branch, tag, sha, ref, etc...)
  15.      type: string
  16.      default: ""
  17.  steps:
  18.    - name: clone
  19.      image: "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/git-init:v0.21.0"
  20.      env:
  21.        - name: PARAM_URL
  22.          value: $(params.url)
  23.        - name: PARAM_REVISION
  24.          value: $(params.revision)
  25.        - name: WORKSPACE_OUTPUT_PATH
  26.          value: $(workspaces.output.path)
  27.      script: |
  28.       #!/usr/bin/env sh
  29.        set -eu
  30.        CHECKOUT_DIR="${WORKSPACE_OUTPUT_PATH}"
  31.        /ko-app/git-init \
  32.          -url="${PARAM_URL}" \
  33.          -revision="${PARAM_REVISION}" \
  34.          -path="${CHECKOUT_DIR}"
  35.        cd "${CHECKOUT_DIR}"
  36.        EXIT_CODE="$?"
  37.        if [ "${EXIT_CODE}" != 0 ] ; then
  38.          exit "${EXIT_CODE}"
  39.        fi
  40.        # Verify clone is success by reading readme file.
  41.        cat ${CHECKOUT_DIR}/README.md

创建第二个文件 pipeline.yaml,并用你喜欢的文本编辑器打开它。这个文件通过设置诸如可以运行和处理任务的工作区等重要参数来定义流水线。

  1. apiVersion: tekton.dev/v1beta1
  2. kind: Pipeline
  3. metadata:
  4.  name: cat-branch-readme
  5. spec:
  6.  params:
  7.    - name: repo-url
  8.      type: string
  9.      description: The git repository URL to clone from.
  10.    - name: branch-name
  11.      type: string
  12.      description: The git branch to clone.
  13.  workspaces:
  14.    - name: shared-data
  15.      description: |
  16.       This workspace will receive the cloned git repo and be passed
  17.        to the next Task for the repo's README.md file to be read.
  18.  tasks:
  19.    - name: fetch-repo
  20.      taskRef:
  21.        name: git-clone
  22.      workspaces:
  23.        - name: output
  24.          workspace: shared-data
  25.      params:
  26.        - name: url
  27.          value: $(params.repo-url)
  28.        - name: revision
  29.          value: $(params.branch-name)

最后,创建一个 pipelinerun.yaml 文件,用喜欢的文本编辑器打开它。这个文件真正的运行流水线。它调用流水线中定义的参数(继而调用任务文件中定义的任务)。

  1. apiVersion: tekton.dev/v1beta1
  2. kind: PipelineRun
  3. metadata:
  4.  name: git-clone-checking-out-a-branch
  5. spec:
  6.  pipelineRef:
  7.    name: cat-branch-readme
  8.  workspaces:
  9.    - name: shared-data
  10.      volumeClaimTemplate:
  11.        spec:
  12.          accessModes:
  13.           - ReadWriteOnce
  14.          resources:
  15.            requests:
  16.              storage: 1Gi
  17.  params:
  18.    - name: repo-url
  19.      value: <https://github.com/tektoncd/pipeline.git>
  20.    - name: branch-name
  21.      value: release-v0.12.x

把不同工作分在不同的文件中的好处是,git-clone 任务可以在多条流水线中复用。

例如,假设你想为一个流水线项目做端到端的测试。你可以使用 git-clone 任务 来让每一次测试都基于最新的代码

总结

只要你熟悉 Kubernetes,那 Tekton 对你来说就像其他 Kubernetes 原生应用一样简单。它有很多工具可以帮助你创建流水线并与之交互。如果你喜欢自动化,不妨试试 Tekton!


via: https://opensource.com/article/21/11/cicd-pipeline-kubernetes-tekton

作者:Savita Ashture 选题:lujun9972 译者:lxbwolf 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

LCTT 译者 :Xiaobin.Liu
🌟🌟🌟🌟
翻译: 51.0 篇
|
贡献: 1218 天
2019-11-30
2023-04-01
https://linux.cn/lctt/lxbwolf
欢迎遵照 CC-BY-SA 协议规定转载,
如需转载,请在文章下留言 “转载:公众号名称”,
我们将为您添加白名单,授权“转载文章时可以修改”。


微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
详解使用Dex实现Kubernetes身份验证21道题帮你轻松拿捏 Kubernetes 面试硬核!Kubernetes 网络排错“狂飙”级指南,运维请收好15 个 Kubernetes 最佳实践3个管理多 Kubernetes 集群实用工具Medium的Kubernetes基础设施Kubernetes Operator 最佳实践RRC detection、CornerNet、M2Det、FOCS…你都掌握了吗?一文总结目标检测必备经典模型(三)美国演员工会(SAG-AFTRA) 工作信息我思念的城市图解 Kubernetes Pod 是如何获取 IP 地址?《更多的诗歌》:45: 在大海与陆地之间使用 Kubespray 安装 Kubernetes 集群 | Linux 中国如何使用Kubernetes实现应用程序的弹性伸缩「sealos」完成2000万元的天使轮和天使+轮融资,旨在打造以kubernetes为内核的云操作系统|早起看早期谷歌云推出配置管理仪表板,简化 Kubernetes 集群管理如何优雅限制 Kubernetes 集群中文件描述符与线程数量如何入门 Linux Shell 脚本编写 | Linux 中国Kubernetes 中 Ceph、LINSTOR、Mayastor 和 Vitastor 存储性能对比破茧成蝶 - Serverless Kubernetes 的思考与征程(二)揭秘 ChatGPT 背后的技术栈:OpenAI 如何将 Kubernetes 扩展到了 7500 个节点从修复 Kubernetes 集群中,我学到了什么一款利器 ,持续分析 Kubernetes 中服务的性能老家的地方戏今年上了春晚如何使用机器学习来有效管理 Kubernetes 资源何长工的行政级别手把手教你基于 Kubernetes 实现 CI/CD 配置今年第一个版本 Kubernetes 1.27,发布啦!豆瓣评分8.9!300页Kubernetes学习手册,全是核心知识!为Kubernetes集群部署一个ChatGPT机器人Kubernetes 上 Java 应用的最佳实践Kubernetes 1.27发布,冻结了原有的镜像注册中心并提供Pod资源就地更新功能Kubernetes 如何保障容器可用性?一文介绍探针的使用如何逐步安装 Kubernetes(k8s)指标服务器 | Linux 中国Kubernetes 调查报告:配置不当可能导致安全问题
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。