当TKE遇上Coding, 业务如何实现快速迭
当TKE遇上Coding,业务如何实现快速迭代
前言
在互联网行业敏捷开发,DevOps 理念被越来越多的企业采纳, 敏捷开发和DevOps 本质上都是一种协作文化, 都是着眼于打破壁垒, 增加成员共同责任感。DevOps和Agile减少了交接,提高了向客户交付的速度。
DevOps 在企业中的落地不仅仅是一些流程化的工具(例如CI,CD,容器等技术),更是一整套整体的开发流程和团队
协作的改造. 对于中小企业选择CID 工具尤其重要,使用成熟的工具和现在流出的容器技术能给企业带来很大价值(节省成本,快速迭代, 快速应对业务变化)。
什么是 CI/CD
? 与敏捷开发和DevOps的关系是什么?
他们的关系可以通过下面的图简单的描述
什么是CI (Continuous Integration)
持续集成(Continuous Integration)简称CI
在CI环境中,开发者频繁的对代码的更改合并, 系统就会通过自动构建应用并运行不同级别的自动化测试来验证这些更改. 确保这些更改不会应用造成破坏。这意味着测试内容涵盖了从类和函数到构成整个应用的不同模块。如果自动化测试发现新代码和现有代码之间存在冲突,CI 可以更加轻松地快速修复这些错误。
什么是CD (Continuous Delivery && Continuous Deployment)
持续交付(Continuous Delivery)
在完成ci的流程之后,持续交付可以自动将已经验证的代码发布到存储库.
可以部署到预生产环境,交付给质量团队或用户
持续部署(Continuous Deployment)
cicd 的最后一个阶段就是持续部署. 持续部署意味着所有的变更都会被自动的部署到生产环境。持续交付也可以被部署到生产环境,出于业务考虑,可以选择不部署. 如需部署必须先实施持续交付
区别: 持续交付是一种能力,持续部署是一种方式
什么是Coding
Coding 提供整套的研发流程管理系统(包含了完整CICD流程)。从需求提交到产品迭代,从产品设计到代码管理,自动化测试、持续集成,构建物管理直至最终持续部署,整套流程均在 CODING 完成。在 CODING 您可以实现流水线标准化作业,自动化版本记录,降低企业研发管理难度,提升研发效率。
Coding 是实现CICD流程的一种工具, 其他的CICD工具有很多(gitlab jenkins,Travis CI等)
为什么选择Coding
目前存在2种类型的CI/CD工具, 一种是 On-Premise 需要用户自己搭建服务器来运行CI/CD工具.
一种是Hosted 工具类SaaS服务类型, 不需要用户自己搭建服务器.
Hosted 优势:
- 维护成本低: 运行环境由服务上托管, 维护成本为零,相比On-Premise工具,使用者需要花大量时间部署和维护服务器.
- 干净的运行环境: 在使用Python作为项目的开发语言的时候,需要对不通过的python版本(2.7,3.6,3.7)进行持续集成, 那么Hosted CI/CD 可以轻松满足,每次都会创建一个新的运行环境,版本随时调整。
- 预装软件和运行时: 每一个项目在做持续集成时,往往会需要依赖不同的运行时和工具链,Hosted CI/CD Service 会帮你预装好许多常用的软件和运行时,大大减少了搭建环境的时间
Coding 是一个同时支持HOsted模式和On-Premise模式(支持私有化部署)的 CICD工具。
而且支持jenkins,代码管理(也同时支持github,gitlab),敏捷开发管理, 以及支持Kubernetes 容器化部署,无缝支持TKE
对于中小企业来说可以使用Hosted模式 来快速应对产品交付,实现业务快速迭代。
Coding 在Tke 中的使用
腾讯云容器服务(TKE )基于原生 Kubernetes 提供以容器为核心的解决方案,解决用户开发、测试及运维过程的环境问题、帮助用户降低成本,提高效率。
实践 DevOps 理念需要用到许多工具与底层服务,但若要完成闭环链路需要长期的投入、搭建复杂工具链体系。这导致了团队整体时间、资源投入很大,甚至有可能因此影响研发能效与交付能效、耽误业务的发展时机。而 CODING 与云端优势相结合,提供了统一协作平台及研发工具链。
在 CODING 一体化研发效能平台上运行工作流,这些宝贵的数据将会演化为项目实施过程中所积累的团队知识,沉淀为集体经验,帮助您的团队不断自我迭代更新。不仅如此,使用 CODING 还能够实施软件研发全生命周期管理,摆脱复杂的基础设施运维托管
Coding目前无缝对接TKE服务, 这次给初步介绍下在Coding 中如何实现CICD,并将服务部署到TKE 集群中.
创建项目并创建代码仓库
入口: TKE 容器服务 --> DevOps --> 容器DevOps --> 前往Coding DevOps( 或者直接登陆https://coding.net/) 在TKE 容器服务里面进入可以使用 统一账号认证。
创建项目
在本次测试用我们使用DevOPs 项目模板, 同时会自动创建一个属于我们的代码仓库. 本次我们创建的名称叫Coding-test
创建制品库
什么是制品库
软件制品是指由源码编译打包生成的二进制文件,不同的开发语言对应着不同格式的二进制文件,这些二进制通常可以直接运行在服务器上
创建流程: 制品库 --> 新建制品库
注意在设置好访问令牌后,需要记下这个访问令牌,为后面TKE拉取镜像使用
持续集成
操作步骤: 持续集成 --> 新建构建计划 --> 选择构建计划模板 --> Golang+Gin+Docker(本次测试为go项目)
在执行
构建计划前 需要在TKE集群中把coding的docker registry 账号添加到集群中用来作为pull镜像授权
kubectl create secret docker-registry coding --docker-server=coding的registry地址 --docker-username=用户名 --docker-password=密码 --docker-email=邮箱地址
具体的操作步骤将在下面的短视频中给大家展示:
持续部署
操作流程: 持续部署 --> kubernetes --> 配置云账号 --> 配置应用和流程 --> 关联项目和应用 --> 开始部署
具体的操作步骤将在下面的短视频中给大家展示:
总结
在本篇文章中给大家展示了coding 基于tke/kubernetes实现的cicd,本次只是简单的介绍了下基本使用,更加详细的内容可以参考coding的官网文档coding. 在这里给大家简单介绍了Deopvs和Agile中的一个工具的使用, DevOps和Agile减少了交接,提高了向客户交付的速度。感谢coding团队的支持。
欢迎大家关注本栏目,我们专注于Kubernetes生态,持续给大家分享。
- ASP.NET AJAX(11)__ScriptManagerUpdatePanel的支持成员功能控制成员脚本控件支持成员ScriptMode和ScriptPathLoadScriptsBeforeU
- SQL Server 2016新特性:动态数据屏蔽(DDM)
- ASP.NET AJAX(12)__浏览器兼容功能判断浏览器的类型和版本Sys.Browser针对DOM元素的兼容操作针对DOM事件的兼容操作
- 设计模式专题(六)——原型模式
- ASP.NET AJAX(13)__利用Microsoft AJAX Library开发客户端组件Sys.Component成员Sys.IDisposable成员Sys.INotifyDisposin
- 设计模式专题(七)——建造者模式
- ASP.NET AJAX(14)__UpdatePanel与服务器端脚本控件脚本控件的作用脚本控件的指责Extender模型脚本控件和Extender模型在PostBack中保持状态在UpdatePa
- ASP.NET AJAX(15)__构建高性能ASP.NET AJAX应用UpdatePanel的性能问题使用UpdatePanel的注意事项脚本加载避免脚本阻塞页面显示AjaxControlTool
- LINQ to SQL(1):基础入门
- 设计模式专题(十)——观察者模式
- LINQ to SQL(2):生成对象模型
- 使用 Oracle 的 Security External Password Store 功能实现数据库加密登陆
- LINQ to SQL(3):增删改查
- LINQ to SQL(4):OR设计器
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【每周一库】- cached - 缓存结构型、辅助函数记忆化
- meta生成器 —— 表单元素组件 meta表单代码meta的模板data变幻
- 不用写代码也能做表单 —— 加载meta即可 菜单表单加载json运行效果。ModelAbout
- 从0到1,手把手教你入门 etcd
- 数据结构:手把手带你了解 ”图“ 所有知识!(含DFS、BFS)
- 设计模式之单例模式
- AndroidStudio创建JNI 工程与调用
- Java 版植物大战僵尸思路和源码分享!
- 你好MyBatis 入门篇
- 你好MyBatis 中级篇
- 你好MyBatis 中高级篇
- Nginx反代理获取真实IP
- 你好MyBatis 高级篇
- redis实现分布式锁:他说,他的分布式锁,很润哦
- Python_字符串