在Tekton中,所有的操作均在Kubernetes Pod内进行,所以可以一次并行多条流水线而不会产生队列,而且依托于Kubernetes Scheduler,可以轻松控制整体资源占用与分布。

Tekton推荐分解任务到不同的镜像中,称为Task,Task可组合成Pipeline,我们只需要将需要执行的代码与Pipeline进行绑定,就可以实现我们的流水线了。


需求分解

常规的持续集成流水线,一般拉取代码、静态检查、构建镜像、推送镜像、通知持续部署服务、通知提醒相关人员,将以上流水线分解至Tekton,可以是这样的形态:

在Tekton中,Initial克隆代码这部是用默认功能Resource实现,以下Task使用此功能可以实现文件共享传递,所以我们只需要定义以下4条Task并组合为Pipeline,即可实现我们的需求。


Pipeline

1. Task Sonar / 代码静态检查

sonar默认会读取源代码根目录下的sonar-project.properties文件,所以需求代码中包含这一文件,文件的大致格式如下:

sonar.projectKey=service-name
sonar.projectName=service-name
sonar.projectVersion=1.0
sonar.sources=.
sonar.sourceEncoding=UTF-8
sonar.host.url=https://sonar.spex.top
sonar.login=7e8b31e45c27b2db5dc89aac8758903909e24596

Task直接引入resources资源,会自动克隆代码并挂载到Pod的/workspace/scan目录下。

apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: sonar
spec:
  resources:
    inputs:
     - name: source-repo
       # 构建源码资源
       type: git
       targetPath: scan
  steps:
    - name: sonar-scan
      image: sonarsource/sonar-scanner-cli
      workingDir: /workspace/scan
      command:
        - sonar-scanner