基于git的deployment和rollback方法

一种devops实践方法的总结。

remote repos

  • 推荐放置于github
  • 最新可部署代码放置于master分支。由项目代码的code master掌管,其他人不允许直接push到这个分支。
  • spec design. architecture(如果不是独立的role,那么所有承担此角色的人要一起来讨论spec的设计)。
  • developer开新分支,根据spec编写unit-test和implementation code。此处可以采用Test-driven development。自行进行功能测试,包含unit-test以及end-2-end test。撰写部署脚本。git push。然后到github创建pull request并请求code master进行1-to-1 code review,review通过由master merge代码。

spec design

spec design要由architecturer role / group来完成,包含:

  • api定义
    • 函数名称(名称的自解释性非常重要!!)
    • 业务逻辑,即函数应该完成的功能
    • 入参名称,数据结构定义,默认值等
    • 返回结果的数据结构,数据结构中的每个字段的名字、属性、默认值等
    • 异常定义,异常代码,异常信息
    • 特性定义,比如幂等性(应该幂等还是不幂等?)、健壮性(是否应该积极抛出异常,还是默默容错?)、副作用(是否应该是pure的?是否应该stateless?),等等
  • model定义
    • model的命名
    • 数据结构定义,数据结构中的每个字段的名字、属性、默认值等
    • 数据迁移定义(比如django的migrations)

架构师最好统一把migrations生成(避免硬分叉冲突),并把prototype也落实成代码,以便dev直接在其中补齐逻辑实现即可。

补充:对于存在ORM migrate的架构,推荐把model升级和code升级分成两步,先migrate model(形成一个commit point),确保没问题之后再upgrade code,这样,如果第二步失败需要回滚,则只需要回滚到第一步的commit point。
建议由architecturer (dev arch)来做。

deployment

  • 由devops完成(或分担此角色的人共同完成,结对)
  • 规划代码部署位置,推荐在/opt/{APP_NAME}
  • git pull
  • 重启服务,比如对于systemd守护的服务,使用sudo service SERVICE_NAME restart
  • 查看服务状态,包括但不限于:
    • service XXX status 查看systemd service的状态
    • ps aux | grep XXX 查看进程运行否
    • netstat -na | grep XXX 查看服务是否正在监听相关端口
    • APP自身的status查看方法
  • 最后一定要做一次生产环境的end-2-end test!

rollback

如果部署失败需要回滚,可以使用git,具体方法是:

  1. git log找到上一次部署的commit
  2. git checkout LAST_COMMIT -b rollback
  3. 此时代码切换到rollback分支,且filesystem上的code files回复到LAST_COMMIT的状态
  4. 重启服务。检查状态。做end-2-end test。确保回滚成功。

然后,开始腾出手来仔细检查为何master的code部署失败。fix并重新部署。
成功后,删除rollback分支。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,169评论 19 139
  • 1.git的安装 1.1 在Windows上安装Git msysgit是Windows版的Git,从https:/...
    落魂灬阅读 14,344评论 4 54
  • 弟弟今年17岁,中专休学在家。昨天晚上爸爸去他房间看他睡了没发现2点多钟了还在玩手机,就骂了他,结果我弟就把门给锁...
    heallen阅读 3,401评论 0 0
  • 愿苍天 风调雨顺,愿大地 山崇川畅。愿世间 万物皆宜,愿你我 感恩常在。天灾还要 再家园,地震祈求 灾减少。人间有...
    甘朝武阅读 2,688评论 0 0
  • 敢问路在何方 理想很丰满,现实很骨感。那么,路在哪里?这是许多人的困惑所在。上个世纪八十年代,曾经有一个叫潘晓...
    宏磊阅读 1,787评论 0 0

友情链接更多精彩内容