系统环境
# 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,然后还包括url
和revision
这两个参数,其他使用默认的即可。
单元测试
单元测试阶段比较简单,正常来说也是只是单纯执行一个测试命令即可,我们这里没有真正执行单元测试,所以简单测试下即可,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
说明:deploy
和rollback
两部分我后面将使用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/