本港台开奖现场直播 j2开奖直播报码现场
当前位置: 新闻频道 > IT新闻 >

报码:【j2开奖】持续部署Microservices的实践和准则(2)

时间:2017-03-17 21:10来源:报码现场 作者:118KJ 点击:
通常团队会有业务分析师(BA)做需求分析,业务分析师将需求转换成适合工作的,开发人员(Dev)在拿到新的用户故事卡时会先做分析,之后和业务分析

  通常团队会有业务分析师(BA)做需求分析,业务分析师将需求转换成适合工作的,开发人员(Dev)在拿到新的用户故事卡时会先做分析,之后和业务分析师、技术主管(Tech Lead)讨论需求和技术实现方案(Kick off)。

  开发人员在开发阶段会在分支(Branch)上进行开发,采用的方式提交代码,并且邀请他人进行代码评审(Review)。在Pull Request被评审通过之后,分支会被合并到Master分支,此时代码会被自动部署到测试环境(Test)

  在Microservices场景下,本地很难搭建一整套集成环境,通常测试环境具有完整的集成环境,在部署到测试环境之后,测试人员(QA)会在测试环境上进行测试。

  测试完成后,测试人员会跟业务分析师、技术主管进行,确认需求的实现和技术实现方案,进行验收。验收后的用户故事卡会被部署到生产环境(Production)。

  在上述团队工作的流程下,如果持续部署流水线仅对Master分支进行打包、测试、发布。在开发阶段(即:代码还在分支)时,无法从持续集成上得到反馈,直到代码被合并到Master并运行构建后才能得到反馈,通常会造成“本地测试成功,但是持续集成失败”的场景

  因此,团队对仅基于Master分支的持续部署流水线做一些改进。使其可以支持对Pull Request代码的构建:

  

报码:【j2开奖】持续部署Microservices的实践和准则

  如上图所示:

持续部署流水线区分Pull Request和Master。Pull Request上只运行单元测试,Master运行完成全部构建并自动将代码部署到测试环境。

为生产环境部署引入手动操作,在验收测试完成之后再手动触发生产环境部署。

  经过调整后的持续部署流水线可以使团队在开发阶段快速从持续集成上得到反馈,并且对生产环境的部署有更好的控制。

  版本化一切

  版本化一切,即将服务开发、部署相关的系统都版本化控制。我们不仅将项目代码纳入版本管理,同时将项目相关的服务、基础设施都进行版本化管理。

  对于一个服务,我们一般会为它单独配置持续部署流水线,为它配置独立的用于运行的基础设施。此时会涉及两个非常重要的技术实践:

构建流水线即代码

基础设施即代码

  构建流水线即代码。通常我们使用或者来搭建配置持续部署流水线,每次创建流水线需要手动配置,这些手动操作不易重用,并且可读性很差,每次对流水线配置的改动并不会保存在历史记录中,也就是说我们无从追踪配置的改动。

  在今年上半年,团队将所有的持续部署流水线从Bamboo迁移到了,BuildKite对构建流水线即代码有很好的支持。下图描述了BuildKite的工作方式:

  

报码:【j2开奖】持续部署Microservices的实践和准则

  在BuildKite场景下,我们会在每个服务代码库中新增一个来描述构建步骤。构建服务器(CI Service)会从项目的pipeline.yml中读取配置,atv,生成构建步骤。例如,我们可以使用如下代码描述流水线:

  steps: - name: "Run my tests"command: "shared_ci_/bin/test"agents: queue: test - wait - name: "Push docker image"command: "shared_ci_/bin/docker-tag"branches: "master"agents: queue: test - wait - name: "Deploy To Test"command: "shared_ci_/bin/deploy"branches: "master"env: DEPLOYMENT_ENV: test agents: queue: test - block - name: "Deploy to Production"command: "shared_ci_/bin/deploy"branches: "master"env: DEPLOYMENT_ENV: production agents: queue: production

  在上述配置中,command中的步骤(即:test、docker-tag、deploy)分别是具体的构建脚本,这些脚本被放在一个公共的shared_ci_代码库中,shared_ci_会以git submodule的方式被引入到每个服务代码库中。

  经过构建流水线即代码方式的改造,对于持续部署流水线的任何改动都会在Git中被追踪,并且有很好的可读性。

  基础设施即代码。对于一个基于HTTP协议的API服务基础设施可以是:

用于部署的机器

机器的IP和网络配置

设备硬件监控服务(CPU,Memory等)

负载均衡(Load Balancer)

DNS服务

AutoScaling Service(自动伸缩服务)

Splunk日志收集

NewRelic性能监控

PagerDuty报警

(责任编辑:本港台直播)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
推荐内容