教你本地k8s集群搭建云原生 Tekton CICD 流水线
Tekton CICD Demo这是一个演示 Tekton CICD 的 demo 。 下面我们将从搭建本地 k8s 集群开始 , 同步镜像至国内并部署 Tekton , 一步一步实现一个 CICD 流水线 。 实现更新代码自动触发流水线 , 构建镜像推送到目标仓库 , 并更新 deployment 镜像滚动更新应用 , 最后钉钉机器人通知到群聊 。
源码:https://github.com/win5do/tekton-cicd-demo
[TOC]
前言我心目中理想的CICD工具应该包含以下特性:
- 声明式配置 , 新增配置不需要在UI上操作 , 便于迁移 , 可使用git版本控制
- 配置与项目代码解耦 , 统一集中管理
- 灵活易扩展
Jenkins 虽然可以将 Jenkinsfile 脚本集中管理 , 但针对每个项目还需要在 UI 上配置 。 Jenkins 也有相关插件 configuration-as-code-plugin , 没用过就不评价了 。
而 Tekton 所有配置都是以 k8s 诗 Yaml 文件形式存在 , 即使换了一个集群 , 只需要应用 Yaml 配置即可无缝迁移 。
执行步骤阅读须知
- 完成以下步骤需要 k8s 基础使用能力
- k8s server version >= v1.15
- 以下命令中 alias kc=kubectl
- Tekton 的一些概念和资源在此不再赘述 , 请查阅官方文档:
- 以下步骤在 macOS 10.15 上测试通过 , 一些命令在 Windows 上可能没有 。
- registry.cn-huhehaote.aliyuncs.com/feng-566/ 旗下镜像均可公开访问 , 但是推送镜像需要认证 。 所以需要一个镜像仓库用于推送制品镜像 , 推荐阿里云镜像仓库注册账号即可免费使用 。
- 接收 github webhook 需要一个拥有公网 IP 的服务器 。 如果没有 , 可使用 pull 模式替代 。
- 出现问题请先查看 问题排查
cat <kind-config.yamlkind: ClusterapiVersion: kind.x-k8s.io/v1alpha4nodes:- role: control-plane- role: workerEOFkind create cluster --config ./kind-config.yaml复制代码
安装 Tekton同步镜像由于 Tekton 镜像都是在 gcr.io 上 , 需要 VPN 才能拉取 , 所以第一步需要将镜像同步至国内 。 这里我写了脚本(./script/sync.go)将镜像都同步至阿里云镜像仓库 , 并设为公开访问 , 如无必要可跳过此步 。make sync复制代码
部署 Tekton部署 pipeline、trigger、dashboard 三个组件 。kc apply -f ./src/sync/dst复制代码
check:kc get po复制代码
部署 demo app测试 demo , 用于后面流水线滚动更新 。kc apply -f ./demo/go-echo/deploy/deploy.yaml复制代码
配置 pipeline创建 Task 和 Pipeline 资源 , 每个 Task 为一个独立任务 , Pipeline 则是将多个 Task 串成流水线 。更多 Task 例子可以在官方仓库找到:
配置 github 和 镜像仓库 access token./manifests/pipeline/sercret.yaml 配置 github 和 docker registry 。
将其中url ,username ,password 修改为你自己的 access token 。
配置目标集群 kubeconfig./manifests/resource/cluster-kind.yaml 配置部署时 kubectl 使用的配置* 。
将其修改为你本地 kind 集群的 kubeconfig 。
配置机器人通知./manifests/pipeline/notify.yaml 配置执行成功后聊天机器人通知地址 , 可接入钉钉或企业微信 。
钉钉机器人文档:#/serverapi2/qf2nxq
大家可自行创建团队测试机器人 , 不需要真实企业认证 。
成功后钉钉会收到机器人通知:
文章插图
应用 pipeline 配置
kc apply -f ./manifests/pipelinekc apply -f ./manifests/resource复制代码
test pipeline run手动执行 PipelineRun , 测试 pipeline 流程 。kc apply -f ./manifests/test/pipeline-run-demo.yaml复制代码
check:kc get pr复制代码
Tekton dashboard通过 dashboard 我们可以查看流水线执行状态 。 由于 kind 网络隔离的原因 , 此处我们使用 kc port-forward 将端口暴露出来 。kc port-forward svc/tekton-dashboard 9097# new terminal session# 打开浏览器open http://localhost:9097/#/namespaces/tekton-pipelines/pipelineruns复制代码
流水线执行成功实例:文章插图
[Option 1: push 模式] 配置 Tekton triggers前面的步骤中 , 我们用手动的方式执行了 pipeline , 下面我们配置 Tekton triggers , 通过 webhok 的方式自动执行 。
Tekton trigger 组件是用来接收 webhook , 做一些 校验 , 过滤 , 参数绑定等前处理 , 然后帮你自动创建 PipelineRun 等资源执行流水线 。
- 平台|Win平台上的本地音乐管理软件,MusicBee
- 路由器|家里无线网经常断网、网速慢怎么办?教你几个小窍门,轻松解决
- 走心|平安夜还在送苹果?太不走心了,教你几招,快来物色一个
- 云图|不会制作词云图?我来教你
- 手机|手机文件夹都是英文,占空间还不敢删除,教你一招省下10G内存
- iPhone装了App却在桌面找不到?教你如何解决
- iOS 14小部件如何展示自己心爱的照片?我来教你这个办法
- 显卡涨价时代,老司机教你打造一台高性价比游戏主机
- 手把手教你把门禁卡复制到手机,跟实体门禁卡说拜拜
- 手把手教你查看电脑的硬件信息,杜绝无知小白被电脑城欺骗