系统环境

# k8s version
v1.17.9
# Docker version
20.10.2

流程规划

工作流的阶段划分了以下几个阶段:Clone 代码->单元测试->Golang 编译打包->Docker 镜像构建/推送->Kubectl 部署服务

关于Tekton部署使用详见K8S 部署 Tekton Trigger 的使用

获取源码

Tekton中我们就可以将这些阶段直接转换成Task任务,首先,我们先获取测试用的代码仓库:

# 获取测试demo
git clone https://gitee.com/tengfeiwu/devops-demo.git
# 创建自己的代码库
# git.k8s.local是我的代码库地址,换成你自己的,另外 pipelinerun.yaml 和 other.yaml 中记得替换你自己的地址
http://git.k8s.local/root/devops-demo.git

部署流程

所有的部署流程代码文件,我已整理好:

# 获取流程yaml
git clone https://gitee.com/tengfeiwu/tekton-cicd.git

Clone 代码

kubectl apply -f  task-clone.yaml

说明: 一般来说我们只需要提供output这个个用于持久化代码的 workspace,然后还包括urlrevision这两个参数,其他使用默认的即可。

单元测试

单元测试阶段比较简单,正常来说也是只是单纯执行一个测试命令即可,我们这里没有真正执行单元测试,所以简单测试下即可,apply 一个如下所示的 Task:

kubectl apply -f task-test.yaml

编译打包

创建如下所的 Task 任务,首先需要通过定义一个 workspace 把 clone 任务里面的代码关联过来:

kubectl apply -f task-build.yaml

Docker 镜像

kubectl apply -f task-docker.yaml

说明:

docker build --no-cache -f ./Dockerfile -t $(params.image) . --network=host后面加上 network ,否则镜像会打包失败,报错如下:

ERROR: Unable to lock database: temporary error (try again later)
ERROR: Failed to open apk database: temporary error (try again later)

部署

kubectl apply -f task-deploy.yaml

回滚

kubectl apply -f  task-rollback.yaml

说明:deployrollback两部分我后面将使用Argo CD做 CD ,所以这里仅是简单介绍。

流水线

kubectl apply -f pipeline.yaml

执行流水线

kubectl apply -f other.yaml
kubectl apply -f pipelinerun.yaml

查看流水线状态

命令行

使用tekton CLI工具,安装详见Tekton CLI

# tkn pr describe pipelinerun
Name:              pipelinerun
Namespace:         default
Pipeline Ref:      pipeline
Service Account:   tekton-build-sa
Timeout:           1h0m0s
Labels:
 tekton.dev/pipeline=pipeline

  Status

STARTED       DURATION   STATUS
2 hours ago   1 minute   Succeeded(Completed)

 Resources

 No resources

 Params

 NAME                  VALUE
 ∙ git_url             http://git.k8s.local/root/devops-demo.git
 ∙ image               registry.cn-shanghai.aliyuncs.com/tengfeiwu/devops-demo:v0.1.0
 ∙ charts_dir          ./helm
 ∙ release_name        devops-demo
 ∙ release_namespace   kube-ops
 ∙ overwrite_values    image.repository=registry.cn-shanghai.aliyuncs.com/tengfeiwu/devops-demo,image.tag=v0.1.0
 ∙ values_file         my-values.yaml

 Results

 No results

 Workspaces

 NAME            SUB PATH   WORKSPACE BINDING
 ∙ go-repo-pvc   ---        PersistentVolumeClaim (claimName=go-repo-pvc)

  Taskruns

 NAME                         TASK NAME   STARTED       DURATION     STATUS
 ∙ pipelinerun-deploy-x7j76   deploy      2 hours ago   24 seconds   Succeeded
 ∙ pipelinerun-docker-q8wfb   docker      2 hours ago   27 seconds   Succeeded
 ∙ pipelinerun-build-trkqx    build       2 hours ago   10 seconds   Succeeded
 ∙ pipelinerun-clone-56xjp    clone       2 hours ago   5 seconds    Succeeded
 ∙ pipelinerun-test-npsmw     test        2 hours ago   3 seconds    Succeeded

  Skipped Tasks

 NAME
 ∙ rollback

在 Dashboard 上也可以看到可以流水线可以正常执行,由于部署成功了,所以 rollback 回滚的任务也就被忽略了:

https://tekton.k8s.local/

使用 Tekton 构建自动化流水线

参考文档

Tekton流水