用 Tekton 在 Kubernetes 中编写你的第一条 CI/CD 流水线 | LinuxCN Mirror
Skip to content
返回

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

Tekton 是一个用于创建持续集成和持续交付(CI/CD)系统的 Kubernetes 原生开源框架。

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

Tekton 介绍

Tekton 最初被称为 Knative Build,后来被重组为独立的开源项目,有自己的 治理组织,现在是属于 Linux 基金会 的项目。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 提供的主要组件:

Tekton 术语

Tekton terminology

Tekton pipelines

创建你的 CI/CD 流水线

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

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

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

apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
 name: git-clone
spec:
 workspaces:
   - name: output
     description: The git repo will be cloned onto the volume backing this Workspace.
 params:
   - name: url
     description: Repository URL to clone from.
     type: string
   - name: revision
     description: Revision to checkout. (branch, tag, sha, ref, etc...)
     type: string
     default: ""
 steps:
   - name: clone
     image: "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/git-init:v0.21.0"
     env:
       - name: PARAM_URL
         value: $(params.url)
       - name: PARAM_REVISION
         value: $(params.revision)
       - name: WORKSPACE_OUTPUT_PATH
         value: $(workspaces.output.path)
     script: |
      #!/usr/bin/env sh
       set -eu

       CHECKOUT_DIR="${WORKSPACE_OUTPUT_PATH}"

       /ko-app/git-init \
         -url="${PARAM_URL}" \
         -revision="${PARAM_REVISION}" \
         -path="${CHECKOUT_DIR}"
       cd "${CHECKOUT_DIR}"
       EXIT_CODE="$?"
       if [ "${EXIT_CODE}" != 0 ] ; then
         exit "${EXIT_CODE}"
       fi
       # Verify clone is success by reading readme file.
       cat ${CHECKOUT_DIR}/README.md

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

apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
 name: cat-branch-readme
spec:
 params:
   - name: repo-url
     type: string
     description: The git repository URL to clone from.
   - name: branch-name
     type: string
     description: The git branch to clone.
 workspaces:
   - name: shared-data
     description: |
      This workspace will receive the cloned git repo and be passed
       to the next Task for the repo's README.md file to be read.
 tasks:
   - name: fetch-repo
     taskRef:
       name: git-clone
     workspaces:
       - name: output
         workspace: shared-data
     params:
       - name: url
         value: $(params.repo-url)
       - name: revision
         value: $(params.branch-name)

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

apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata:
 name: git-clone-checking-out-a-branch
spec:
 pipelineRef:
   name: cat-branch-readme
 workspaces:
   - name: shared-data
     volumeClaimTemplate:
       spec:
         accessModes:
          - ReadWriteOnce
         resources:
           requests:
             storage: 1Gi
 params:
   - name: repo-url
     value: <https://github.com/tektoncd/pipeline.git>
   - name: branch-name
     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中国 荣誉推出



Previous Post
硬核观察 #958 Twitter 公开推荐算法源代码,马斯克获特别优待
Next Post
如何安装和使用 Neovim