在Tekton中,所有的操作均在Kubernetes Pod内进行,所以可以一次并行多条流水线而不会产生队列,而且依托于Kubernetes Scheduler,可以轻松控制整体资源占用与分布。
Tekton推荐分解任务到不同的镜像中,称为Task,Task可组合成Pipeline,我们只需要将需要执行的代码与Pipeline进行绑定,就可以实现我们的流水线了。
常规的持续集成流水线,一般拉取代码、静态检查、构建镜像、推送镜像、通知持续部署服务、通知提醒相关人员,将以上流水线分解至Tekton,可以是这样的形态:
在Tekton中,Initial克隆代码这部是用默认功能Resource实现,以下Task使用此功能可以实现文件共享传递,所以我们只需要定义以下4条Task并组合为Pipeline,即可实现我们的需求。
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