做网站卖东西赚钱么,中国专业做鞋子的网站,自做跨境电商网站收款,网站编程设计心得体会摘要#xff1a; 本期的分享我们邀请到了阿里巴巴研发效能事业部的董越老师#xff0c;他是阿里巴巴内部培训百年技术课堂的著名讲师#xff0c;他讲的《百技课程-代码服务》是每一位入职技术童鞋必修的一门课#xff0c;我们也将这种阿里内训技术首次面向业界公开#xf…摘要 本期的分享我们邀请到了阿里巴巴研发效能事业部的董越老师他是阿里巴巴内部培训百年技术课堂的著名讲师他讲的《百技课程-代码服务》是每一位入职技术童鞋必修的一门课我们也将这种阿里内训技术首次面向业界公开希望可以影响更多技术人。云小妹导读本期的分享我们邀请到了阿里巴巴研发效能事业部的董越老师他是阿里巴巴内部培训百年技术课堂的著名讲师他讲的《百技课程-代码服务》是每一位入职技术童鞋必修的一门课我们也将这种阿里内训技术首次面向业界公开希望可以影响更多技术人。这节课分享中提及的阿里技术人使用的产品Aone也于2017年正式上阿里云以云效的产品名面向业界开发开放。讲师简介董越高级产品专家。在软件研发管理领域钻研十余载是《未雨绸缪——理解软件配置管理》等书的作者或译者。2014年加入阿里目前从事阿里巴巴软件研发协同平台Aone/云效的产品设计工作。 概述同学们好。为了让新同学能够比较快速的开始在阿里巴巴研发环境下的开发我们设计了几门课程。其中本节课程是百技课程-代码服务的接续课程介绍源代码写好后如何发布上线的内容。这包括从源码到上线、质量检测的多种方法、流水线三个部分。其中每一部分在本文中都是概要性的介绍并给出相应的参考文档作为进一步学习的资料。学习了这门课程大家就知道了在阿里写完源代码之后要做哪些事情使用什么工具就能把软件安全发布上线。从源码到上线事情可不简单问大家一个问题什么叫程序或者说什么叫软件好像这里面有歧义。有时候指的是源代码。有时候指的是安装包或者安装光盘比如“我下载了一个软件。” 而有时候指的是已经安装好随时可以运行的程序。比如手机上新装了一个应用。还有的时候指的是正在运行中的正在提供服务的程序比如一个网站。有这些不同的含义其实反映了一件事情单纯的源代码其实还不能提供服务不能为用户带来价值。只有源代码被构建打包并且被部署运行起来才能为用户带来价值。那么如何才能部署运行起来为用户提供服务呢这很麻烦吗是的这很麻烦。想象一下你是一个初创企业的CTO。忽然天上掉馅儿饼掉下来五个Git库源代码已经写好而且一点儿毛病没有。每个Git库能编译成一个war包。你需要把每个war包部署到100台服务器上总共需要500台服务器。哦对了随着用户使用会不断追加新功能产生新版本需要更新服务器上的软件版本。假定你不是在阿里巴巴。假定也没有阿里云。假定你只是有很多钱可以雇到合适的人。你想想一共有多少事情要做要买服务器。哦不先要买或者租机房。风火水电要搞稳妥。要接好网络。每台机器要装好操作系统的合适版本。不止是操作系统还有相关基础软件。还有路由。还有数据库还有监控系统还有日志收集系统。中间件也是必须的。哦域名还忘了申请了……这些搞定了才能安装那些war包。这么多台肯定不能一台一台操作累死了得有个批量操作的方法。可这方法怎么弄呢另外考虑到将来要更新软件版本所以这还不是一次搞定的事情。那更是得批量操作了。更新版本的时候还有个麻烦事不能一下子都停机啊。那不就事故了。所以得分批来。比如先更新20%的机器再更新20%如此一共五批弄完。往细节看其中更新某一台机器其实都是个挺复杂的过程。首先下载新的war包到这台机器然后开始替换过程。先得把流量切走吧切流量前还得先把监控报警关上。流量切走了就可以停止当前war包的运行。然后用新的war包代替旧的war包启动试试看。如果通过了一些基本的自动检测说明新war包大体上能运行于是就开始切流量回来最后把监控报警恢复。忒麻烦还好有工具帮忙怎么办用趁手的工具啊。正是为了提高大家的工作效率让大家能够集中精力在具体业务本身的研发上阿里巴巴集团多年以来建设了一整套基础设施。在交付层和运维层都有大量的基础设施。但这些大家可能感受不深。因为对于一个应用来讲它最关心的事情基本都是通过Aone暴露出来的。Aone也就是最上层研发层的主要工具。回到前面讨论的场景把完美的源代码发布上线这个过程那么大体步骤应该是· 第一步把运行环境初始化好。这一步目前同学们基本可以在Aone上一站式完成了就是在Aone上注册一个新应用然后根据向导指引把上线任务一项一项配下来。当然还有些内容比如数据库还需要访问其他系统申请配置将来我们努力做成一站式配置好。· 第二步根据源码构建出压缩包基本就是把war包压缩一下然后把压缩包部署到各目标服务器上。这一步可以在Aone上一键完成。将来更新版本也一样。点一下按钮所有事情都做完。这就是用Aone的好处。阿里巴巴相关术语为了使用Aone我们得了解一些Aone的关键概念。其实是在阿里巴巴开发时大家一开始约定俗成的概念后来固化在Aone上。我们一个一个来看应用Git库里装的是源代码这是程序的一种形态。那么运行中的程序叫什么呢在阿里巴巴我们管它叫应用。一般来说一个Git库构建生成一个包产生一个应用在若干台服务器/虚拟机/容器中运行在测试、线上环境中运行。一般应用跟Git库是一比一的关系不过也有各种特殊情况比如一个Git库里有多个应用。所以我们确实需要应用这个概念。另外应用不仅包括了应用主包通常是war包打成tgz包也包括了运行所需环境的配置比如tomcat版本等。 二方包三方包指的是来自阿里巴巴外部的开源或商业的包比如jar包、rpm包等。而二方包则是指来自阿里巴巴内部的通常是其他团队的包。也就是说一个团队研发出这个二方包公布出来供各团队使用。当然也可能就是供团队自己使用。反正只要是来自阿里内部的上传到Nexus或Yum这样的包的仓库的就都算二方包。产品/产品线/产品树应用是从部署运维的角度看运行中的程序。产品是从使用者的角度看运行中的程序。通常产品由一到多个应用组成。产品进而构成产品线这样一级一级的上去形成了一棵树叫产品树。产品树的根节点就是阿里巴巴。产品树的第一级展开是各个BU。变更在外面的世界现在变更通常是指线上运行环境的变化比如更新了软件版本比如扩容缩容等运维操作。在阿里巴巴变更也有这个含义。但是在阿里巴巴变更还有一个含义软件研发过程中的含义。通常我们把一条feature分支就对应到一个变更。于是也常管这条feature分支叫变更分支。从这个角度看集成就是把若干变更攒到一起通过各种质量检测后部署上线。发布发布release这个词常常是指软件版本公布出来供使用。但在阿里巴巴这个词不仅对应于部署到线上环境即使是部署到测试环境也叫发布。换句话说发布基本上就是部署的代名词。比如每个变更觉得自己OK了就点一下变更详情页面上的“提交待发布”这个钮标记一下。然后在集成测试环境也就是日常环境对应的流程阶段的详情页面就能看见这个变更。再选中它然后点击“提交发布”这个钮就与其他变更分支一起合并到发布分支并部署到测试环境啦。技术发展趋势发布部署方面在阿里巴巴时下最重要的变革当然是Docker化啦。这方面的文章很多比如阿里人请用AliDocker、以及具体指导T4 应用迁移 docker 发布。那么这一波浪潮之后下一波浪潮会是什么呢有可能是Serverless架构。这方面外面的文章也很多大家可以翻翻看。提高质量的多种方法刚才我们给的是一个天上掉馅儿饼的例子忽然间得到了完美的源代码然后考虑构建并部署上线。现实世界中哪儿有这样的好事儿啊。代码里面肯定有bug啊。那么怎么能够有效率地把问题找出来修复好具体有哪些方法按四个象限梳理为方便梳理我们划一个横轴一个纵轴然后按照得到的四个象限梳理各种质量保证方法。这里所说的横轴在最左边是源代码。在最右边是运行中的程序。这里所说的纵轴在最上边是自动化在最下边是人工。先看左半部分。左下角人工的对源代码的检测。这主要对应的是代码评审。我们在代码服务这门课上介绍的。此外安全评审有时也有人工介入。左上角自动的对源代码的检测。代码规约的自动检查工具就落在这里。事实上还有不少工具也落在这里论品牌有Sonar、PMD等。论方法有圈复杂度等。所有这些自动检测被称之为Static program analysis 或 Static code analysis静态程序分析/静态代码分析。这方面在阿里巴巴有工具支持对应的是Aone的实验室这个功能。可以通过实验室接入各种静态程序分析工具和方法。实验室的前身是CISE。现在CISE也仍然是实验室背后的引擎。所以有时候听别人说CISE的时候你就知道其实指的就是实验室啦。再来看右半部分。右上角是自动的对运行中的程序的检测。这也就是常说的自动测试啦。在阿里巴巴也是主要由Aone的实验室来向大家提供相应服务。这包括单元测试/集成测试接口测试/Web UI测试功能测试/性能测试等等。右下角是人工测试。虽说是人工测试工具也同样可以提供支持主要是管理测试用例。相应的工具是Aone中的测试用例管理。测试环境隔离技术不论是自动测试还是人工测试只要是需要先把应用部署到测试环境那就跟测试环境的管理有关系了。测试环境的管理我们专门讲一讲测试环境隔离技术。想象一下你开发了一个feature也就是一个变更。为了让它比较靠谱再送去集成你需要对它进行测试。单元测试当然好但是是不够的。需要尽可能模拟真实环境进行测试。那么问题来了如何尽可能模拟真实环境比如为每个淘系的工程师另搭一个淘宝测试用这费用咱真花不起……怎么解决这个问题阿里巴巴用了一个聪明的方法测试环境隔离。让大家共享一个测试环境但又仿佛每个人都是独占它的互相不干扰。具体说来假定搭起一套测试环境需要1000台机器分别运行应用ABCDE……。这个环境我们称作日常测试环境。每个应用的版本呢我们姑且称之为A0、B0、C0、D0、E0……现在假定甲这名同学在开发A这个应用的一个变更在开发过程中现在产生的应用版本是A1。于是把A1部署到单独一台机器上并用一些神奇的技术通过中间件等与刚才说的日常测试环境连通。于是在甲这名同学看来他所面对的系统是A1、B0、C0、D0、E0…… 而且仿佛他独占了这个系统。类似的如果乙这名同学为了一个feature在开发A和B分别拉出变更分支产生A2、B2。那么A2、B2将分别被部署到单独的机器上然后它们一起与日常测试环境连通。于是在乙这名同学看来他所面对的系统是A2、B2、C0、D0、E0…… 从乙的角度看他仿佛独占了整个测试系统。甲和乙在测试时不会互相干扰。有了这样的解决方案就同时达到了两个目标尽量模拟真实的环境用不高的代价。关于测试环境隔离技术这里只是简单介绍下原理。阿里巴巴相关术语· 项目环境就是前面说的测试一个feature所需的测试环境。可能对应一个应用上的一个变更也有可能对应多个应用。项目环境使用了上面讲的测试环境隔离技术背后接的一整套测试环境是日常环境详见下面。 日常环境就是集成测试环境。把各个变更攒在一起然后部署到这里看是不是能work。 预发环境这个环境比日常环境更接近真实环境。事实上从网络隔离的角度它不是在测试网而是在生产网。它所连接的数据库也通常就是线上运行使用的数据库。一般来说是先在日常环境测试通过了再到预发环境测一下。 正 正式环境正式环境就是生产运行的真实环境向广大用户提供服务。流水线所谓流水线通俗的讲就是把不同的工作按一定顺序串起来。为什么要串起来呢首先有些工作天生就是有先后顺序的。如果想部署总得先构建吧。所以构建-部署就是天然的工作顺序。如果每次都是先点个按钮做构建等构建结束后再点个按钮做部署那好像有点儿笨啊不如点一个按钮把这两件事按顺序都做了。其次为保证质量我们想往流程里面加规则和卡点。比如必须通过代码评审和安全评审才允许合并代码。这些质量保证性的工作还有可能有不同的顺序和频率。典型的单元测试和静态程序分析应该早做频繁的做。而整个链路的测试比较费劲频率可以相对低些。因此这些工作也是流水线中的环节并且可能以不同频率执行。不同频率这个事儿就是持续交付这个流行词儿中所说的不同stage(阶段)不同频率。Aone提供了把不同的工作串接的能力也就是流水线的能力。在分支模式下每个环境比如日常、预发、正式分别对应一条流水线。在Git Flow和自由模式下你甚至可以把所有工作内容从代码提交到最后正式发布做到一个流水线里。看着代码过一道道“关口”然后发布上线还是很爽的。结语以上概要介绍了从源代码到上线的基本的构建部署过程讲解了各种质量保证方法及其工具支持讲解了流水线把流程作业连接起来自动运转。这些能力合在一起就实现了对持续交付的一整套工具支持方案。当然如果你问DevOps的工具支持方案我也会说以上几部分构成了DevOps的工具支持方案…… 名字是次要的关键是帮上广大研发同学的忙高效且稳妥的开发和发布。这节课只是概要介绍。更多内容阿里内部的童鞋可参考老A小谈的玩儿转项目环境这场或文字版开发如何玩转Aone项目环境。备注外部的童鞋可以使用Aone的云上版本云效体验一个阿里技术人工作的一天原文链接本文为云栖社区原创内容未经允许不得转载。