【实战】在AWS上部署持续集成与持续交付管道

  • 时间:
  • 浏览:3

今天朋友儿讨论CI/CD,即持续集成(Continuous Integration)与持续部署(Continuous Deployment),这对于软件交付工程师或tcp连接运行员来说非常重要。

首先朋友儿说CI-持续集成,这是为保证不同功能的开发人员所贡献的代码保持同步,简单的说只是 通过自动测试、验证与反馈的法子实现tcp连接运行员间的协同。比如说开发团队将个人的代码库都装入 Github上,以后每个开发人员都Fork了一有有2个多副本在本地做开发测试,最终朋友儿希望将每个开发人员的代码段集成到主线(Mainline)中,在这日后朋友儿不能创建测试案例保证tcp连接运行不仅不能单步运行,只是能按照主线的逻辑运行不至于影响其他模块。在持续集成的场景中,开发人员不能不断拉测试案例来验证tcp连接运行运行正常,与主线兼容良好,不沒有发布时有巨大改动。

再说持续部署,他将持续集成所编译的tcp连接运行部署到环境中,既然是持续部署,就不能是某个特定项目的多个场景,比如说临时环境(Staging Environment)、测试环境(Testing Environment)、验收环境(Acceptance Environment)最后是生产环境(Production Environment)。当然也包括了各个环境中的高可用、负载均衡等场景。

持续集成和持续部署的工具有AWS CodeBuild/CodeDeploy,Atlassian Bamboo和Jenkins。朋友儿拿一有有2个多Python Flask web应用来说,首先朋友儿不能做本地测试,包括单元测试,语义测试和功能测试。通过了上述哪些地方地方测试不能说明本地开发完成。接下来朋友儿不能拉取其他需求,哪些地方地方需求是要将本地代码段并入总线(Master Branch)前的一组测试案例,包括安装、测试案例执行、语义分析、单元测试和评论(为和项目组其他成员协同开发,不能兼容评论功能)。



并入总线后,朋友儿会继续测试包的安装、构建、创建严重不足、创建版本、推到‘提交’阶段(提交阶段是持续集成和持续部署的分水岭)。进入部署阶段,工具会从‘提交’库中获取安装包,继续在临时环境测试、部署场景验证、负载均衡测试、并发连接测试、应用安装、验证和提交。



在临时环境有测试人员,甚至会有最终用户,完成完整版功能点的测试日后会提交进入下一环境,比如测试环境或验收环境。上到临时环境日后,AWS的CodeBuild不能模拟负载均衡环境来验证tcp连接运行对环境的适应性。



朋友儿的Python Flask webtcp连接运行运行也非常简单,只是 一有有2个多调用Rest API的安装tcp连接运行。



朋友儿在CodeBuild中创建一有有2个多项目:



输入项目名称,必要的话,不能去掉 注释。



接下来朋友儿确定tcp连接运行源,朋友儿的代码库存装入 Github上,用户名是bundyfx下的flaskerino数据库。关于Webhook,在Github的代码库中不能创建Webhook,通过AWS CodeBuild项目中的复选框会自动关联Github的代码库从而自动创建Webhook。



接下来不能确定运行环境,包括确定CodeBuild的镜像还是自定义Docker镜像、操作系统、编译环境和版本等等。



原困最后确定使用buildspec.yml来作为Build的配置文件,以下是此yml文件的样式:



在一种 yml文件中,朋友儿不能都看CodeBuild分为一有有2个多阶段(Phase):安装阶段和预构建阶段。在安装阶段,首先执行的是更新pip(对于半生不熟悉python开发的朋友,这里普及一下,pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装、卸载的功能);以后是安装根目录下即setup.py中定义的所有安装包,即flask和pylint



预构建阶段执行的一有有2个多命令,先是找到所有*.py的文件,以后对其语义进行检查(即pylint,python linting);以后在对此项目做单元测试。日后朋友儿定义了一有有2个多artifacts:的话,意为将所有输出文件作为制品打包提交给下一阶段。

制品输出位置不能Amazon S3可选,它共要一有有2个多制品杂货店,CodeBuild不能在一种 杂货店里寄存和取出制品部署到各个环境中。



除了上述选项之外,还其他高级选项,包括确定加密S3,制品打包格式、资源耗费(一般情形3GB,2vCPU绰绰有余了),环境变量等等。



和其他的云产品一样,AWS CodeBuild仅根据你的使用时间来收费。创建完CodeBuild的项目日后,原困朋友儿日后勾选了自动关联Github的代码库变化。在Github中朋友儿也就自动创建了关联的Webhook。



在URL的释义中标明了pull_request and push,意为当github的此代码库收到推送更新时,CodeBuild会自动对新版本进行构建(包括朋友儿上面所说到的安装、语义测试和单元测试);当CodeBuild这边的项目执行完某个测试日后,在Github的代码库也会收到一有有2个多comments标记测试情形。



接着朋友儿确定代码库的位置,跟日后一样,朋友儿确定Github上的位置。



在确定Build提供者时,原困朋友儿先前创建了项目,这里确定CodeBuild的提供者以及对应的项目名称即可。



同样,下一步时确定部署对象。原困朋友儿日后的部署提供者是AWS的CodeDeploy,确定一种 提供者并确定日后创建的应用名和部署组名。



最后朋友儿给刚创建的AWS Pipeline服务取个名字。



CodePipeline就自动帮朋友儿梳理了整个开发流程,并自动结束 运行。



运行到每一步,朋友儿不能进入都看运行的每个细节,比如Build的运行情形。每一有有2个多阶段前的小三角箭头不能继续下钻查看进一步的运行情形。



再比如CodeDeploy阶段,朋友儿不能中断任意正在运行的阶段;查看每一有有2个多高可用下属实例的情形及客户流量信息。



除了按照Code Pipeline的向导部署各个阶段外,朋友儿还不能直接编辑当前的Pipeline,同类删掉某个阶段,或去掉 某个自定义的新阶段。



可去掉 的阶段包括审批、源码、构建、测试、部署和激活。在测试阶段通过日后,朋友儿不能考虑将代码部署到生产环境了。这日后朋友儿在日后创建的Code Pipeline中去掉 一有有2个多生产阶段。



在生产阶段的配置中,朋友儿不能将其指向到生产的部署组。



保存日后,Code Pipeline就会自动进入蓝绿部署阶段。



在详情页不能查看当前阶段的部署完整版报告。



运行完成后,朋友儿就不能考虑更新当前的版本了,点击Pipeline下方的Release Change更新版本。



系统会提示最近的变更将覆盖原始代码,算是据悉,朋友儿点击发布(Release)。



这期的内容就到这里,谢谢朋友儿。

对于任何一有有2个多tcp连接运行的开发,有没哪些地方地方工具不能可视化地都看其居于哪一阶段呢?这里就引出了本期的重点:CodePipeline是一有有2个多持续提交服务(continuous delivery service),不能方便地建模、可视化、自动部署目标软件,更直观地控制软件发布的各个阶段。

在定义完应用名和部署组名后,进入部署法子的确定,CodeDeploy提供了一种部署法子,分别是就地部署(In-place deployment)和迭代部署(Blue/green deployment)。前者意为直接用最新版本替换当前的运行tcp连接运行,期间原困有文件夹和目录底部形态的更新,CodeDeploy会自动将相关前端应用指向新的目录位置;后者更适用于有负载均衡的生产场景,比如当前tcp连接运行有50个实例运行在负载均衡器下,最新版本同样哪些地方地方地方实例。tcp连接运行不能在指定时间切换,一齐保留日后的版本,以便在新版本运行故障时回切。这里朋友儿从生产出发,确定迭代部署(Blue/Green Deployment)



在环境配置中,建议确定好友克隆自动定标组(Automatically copyAuto Scaling group),意为将现行环境的资源分配情形好友克隆到最新版本中并有自适应功能,以保证迭代后对并发压力的应对能力。



在一种 配置的下方朋友儿不能都看当前正在运行的所有实例的ID列表以及当前算是启用了负载均衡,这跟朋友儿日后所要配置的迭代方案有密切关系。



在部署设置中,迭代部署的默认配置是一次仅更新一有有2个多实例,且立即切换客户端的访问流量到新实例,对于旧实例在切换一小时后停止运行。



当然朋友儿只是能修改一种 默认配置,建议是既然要立即切换客户端访问实例,何不一次性替换掉所有的实例。至于旧实例的保留时间,看内部管理规定或内部管理法律,这里不做推荐。

最后输入具有部署权限的账号名称,点击Create Application即可完成预部署。



在朋友儿上期讲CodeBuild的日后谈到了Amazon S3制品库,这里朋友儿只是能根据提示直接将S3中的制品位置输入到脚本中完成部署。



值得一提的是,通过CodeDeploy,不仅不能将tcp连接运行部署在AWS上,还不能部署在本地环境中。