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 的一些概念和资源在此不再赘述,请查阅官方文档:https://tekton.dev/docs/pipelines/
- 以下步骤在 macOS 10.15 上测试通过,一些命令在 windows 上可能没有 。
- registry.cn-huhehaote.aliyuncs.com/feng-566/ 旗下镜像均可公开访问,但是推送镜像需要认证 。所以需要一个镜像仓库用于推送制品镜像,推荐阿里云镜像仓库注册账号即可免费使用 。
- 接收 github webhook 需要一个拥有公网 IP 的服务器 。如果没有,可使用 pull 模式替代 。
- 出现问题请先查看 问题排查
cat <<EOF >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 例子可以在官方仓库找到:https://github.com/tektoncd/catalog
配置 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 配置执行成功后聊天机器人通知地址,可接入钉钉或企业微信 。
钉钉机器人文档:https://ding-doc.dingtalk.com/doc#/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 将端口暴露出来 。【教你本地k8s集群搭建云原生 Tekton CICD 流水线】
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 的方式自动执行 。
推荐阅读
- 眼袋怎么去?教你去眼袋八大招
- 14年新茶将上市,倒春寒导致襄阳本地新茶晚点,新茶
- Win10将强制删除Flash?教你屏蔽Flash删除补丁
- 手把手教你做app自动化测试
- 教你如何改善孩子的固执性格
- 如何防晒 教你冬季防晒的有效方法
- 春季皮肤过敏6步教你调理敏感肌肤
- 春季高发过敏性呼吸疾病 专家教你如何饮食调养
- 高分学长教你如何学好高一生物
- 睡眠不好怎么办 教你八大解决睡眠的食疗方法