针对生产环境发布新版本后有bug需要紧急修复的情况,协作流程思路:新建对应的hotfix补丁分支,相关开发人员基于hotfix分支进行bug修复,修复完毕验证无误后,同样通过Merge Request合并至主仓库,然后由hotfix分支构建重新发布至生产。

其中Master成员负责tag和branch的创建,全体相关开发人员基于分支进行开发。详细流程如下(以JIRA Sprint 31为例,该迭代结束后需要发布版本R-XYPJ-S-CAMS-0.11.0)

一. Master成员:

1. 迭代结束后生产上线,上线后打tag,tag名:R-XYPJ-S-CAMS-0.11.0,tag名与JIRA中发布版本保持一致,随后每次发布变更小版本号

2. 如果生产发现问题需要修复,建立分支B-R-XYPJ-S-CAMS-0.11.0,branch名以“B-”开头,后面加上JIRA发布版本,同时在GitLab上将分支设为受保护。例如B-R-XYPJ-S-CAMS-0.11.0,该分支永久存在。

3. 当相关人员代码开发修复后,处理Merge Request,基于主仓库的B-R-XYPJ-S-CAMS-0.11.0分支再次构建发布新版本,每次发布生产后,再次打tag,同时tag中小版本号递增,例如修复若干bug重新发布后,新的tag名为:R-XYPJ-S-CAMS-0.11.1,再修复若干bug重新发布后,新的tag名为R-XYPJ-S-CAMS-0.11.2,以此递增。

二. 相关开发人员:

1. 明确当前生产环境问题基于哪个branch进行修复, 可询问Master成员。例如, 当前bug修复分支为:B-R-XYPJ-S-CAMS-0.11.0

2. 本地运行 git fetch upstream 更新远端repo的信息。

3. 本地运行 git branch -a, 查看所有分支。输出结果中应该可以看到远端分支:remotes/upstream/B-R-XYPJ-S-CAMS-0.11.0

4. 本地运行git checkout B-R-XYPJ-S-CAMS-0.11.0,切换至hotfix分支

5. 在 B-R-XYPJ-S-CAMS-0.11.0分支上修改,提交。

6. 本地运行git push origin B-R-XYPJ-S-CAMS-0.11.0,将更改提交至个人仓库origin。

7. 在Gitlab上发起Merge Request, 从 origin/B-R-XYPJ-S-CAMS-0.11.0 -> upstream/ B-R-XYPJ-S-CAMS-0.11.0

8. 注意必要情况下使用cherry-pick,例如B-R-XYPJ-S-CAMS-0.11.0上修复的内容同时需要合并到master,则:git checkout master,切换到master分支,然后执行 git cherry-pick [commit-id],合并无误后,push到origin master并提MR到upstream master。反之,如果要同步master上一个commit到B-R-XYPJ-S-CAMS-0.11.0同样方法进行操作。

三. 相关命令参考

1. 分支操作

## 查看分支

git branch -a

 

## 新建分支

git checkout -b B-R-XYPJ-S-CAMS-0.11.0

## 从某个commit新建分支,后面跟commit id

git checkout -b B-R-XYPJ-S-CAMS-0.11.0 8c8ecc322753c36ff49d01b490a882485a1c3e59

## 从tag创建分支 git branch <new-branch-name> <tag-name>

git branch  B-R-XYPJ-S-CAMS-0.11.0  R-XYPJ-S-CAMS-0.11.0

 

## 删除本地分支(参数可以是-d或者-D,-d是处于别的分支时删除,-D是强制删除)

git branch -d B-R-XYPJ-S-CAMS-0.11.0

## 删除远程分支

git push origin --delete B-R-XYPJ-S-CAMS-0.11.0

git push upstream --delete B-R-XYPJ-S-CAMS-0.11.0

 

## 推分支到远程

git push origin B-R-XYPJ-S-CAMS-0.11.0

git push upstream B-R-XYPJ-S-CAMS-0.11.0

2. tag操作

## 查看tag

git tag -l

 

## 新建tag,

git tag -a R-XYPJ-S-CAMS-0.11.0 -m "Sprint 31发布版本0.11.0"

## 如果要从某个commit打tag

git tag -a R-XYPJ-S-CAMS-0.11.0 8c8ecc322753c36ff49d01b490a882485a1c3e59 -m "Sprint 31发布版本0.11.0"

 

## 删除tag

git tag -d R-XYPJ-S-CAMS-0.11.0

## 删除远程tag

git push origin --delete tag R-XYPJ-S-CAMS-0.11.0

git push upstream --delete tag R-XYPJ-S-CAMS-0.11.0

 

## 获取远程tag

git fetch upstream tag R-XYPJ-S-CAMS-0.11.2

## 推tag

git push origin R-XYPJ-S-CAMS-0.11.0

git push upstream R-XYPJ-S-CAMS-0.11.0

## 推所有tag

git push origin --tags

3. cherry-pick

## 单个commit, git cherry-pick加commit id

git cherry-pick d01b490

## 多个commit,git cherry-pick commitid1..commitid100,中间两个点

## 注意,不包含第一个commitid , 即  git cherry-pick (commitid1..commitid100]

git cherry-pick d01b490..a1c3e59

生产环境hotfix部署流程相关推荐

  1. 你知道怎么在生产环境下部署tomcat吗?

    享学课堂特邀作者:老顾 转载请声明出处! 一.前言 小伙伴们在网上看到的很多文章,都是对tomcat的一些介绍,什么配置啊,怎么启动.其实在生产环境中怎么部署,和网上介绍的有很大区别.这篇文章老顾就带 ...

  2. 【转】在生产环境中部署前端代码

    在生产环境中部署前端代码 本文章前端代码是基于vue+webpack开发的 Nginx是一款轻量级的Web 服务器/反向代理服务器 首先,webpack配置如下 在开发过程中,我们是通过npm run ...

  3. Tomcat学习总结(8)——Tomcat+Nginx集群解决均衡负载及生产环境热部署

    近日,为解决生产环境热部署问题,决定在服务器中增加一个tomcat组成集群,利用集群解决热部署问题.

  4. Kubernetes 生产环境安装部署 基于 Kubernetes v1.14.0 之 etcd集群

    说明:没有明确注明在某台服务器,都是在k8s-operation 工作服务器完成 K8S node 节点数大于2000 节点 k8s-operation 目录规划,工作目录/apps/work/k8s ...

  5. ubuntu搭建nodejs生产环境——快速部署手册

    为什么不用CentOS而用Ubuntu作为生产环境的运行平台?这个我也比较好奇,公司订的只能沿用传统,从使用成本的角度来说,此举也是值得肯定的. 测试环境 腾讯云 Ubuntu 16.04 阿里云 U ...

  6. vue服务端渲染——项目搭建、开发、生产环境的部署、浏览渲染、SEO优化

    几个月前,公司要求(服务端渲染)--用vue-ssr做了个服务端渲染,从起搭建.开发.部署.浏览器渲染到优化,希望对有需要的小伙伴有帮助,若是有不足之处,望指出,一起讨论学习.--几个月过去了,公司又 ...

  7. Proxmox VE(PVE)+ceph+物理网络规划-超融合生产环境安装部署案例

    1 Proxmox Virtual Environment介绍 Proxmox VE 是用于企业虚拟化的开源服务器管理平台.它在单个平台上紧密集成了KVM虚拟机管理程序和LXC,软件定义的存储以及网络 ...

  8. 【ketlle】本地开发kitlle job提交至linux生产环境上执行流程

    [ketlle]本地开发kitlle job提交至linux生产环境上执行 前言 操作步骤 后记 前言 因为kettle提供可视化界面,所以我们在本地开发的时候拖拽开发十分便捷,开发完成后,我们需要丢 ...

  9. 生产环境Docker部署ELK跨区访问kafka不通问题的解决

    由于分布式系统的日志集中采集的需求非常强烈,我们组通过调研和实践搭建了一套基于Docker的日志收集系统Amethyst. 我们首先在测试环境搭建了一套基于Docker swarm集群的ELK分布式环 ...

最新文章

  1. 作为程序员,你评估工作量留 buffer 吗?
  2. 医疗机器人等高智能医疗设备成未来发展重点领域
  3. Android MagicIndicator系列之一 —— 使用MagicIndicator打造千变万化的ViewPager指示器...
  4. MySQL——外部数据的批量导入
  5. 我们如何意外地将Hibernate的JDBC流量增加了一倍
  6. 大地win11 64位官方版镜像v2021.07
  7. 唐山师范学院计算机科学与技术地址,2021年唐山师范学院有几个校区,大一新生在哪个校区...
  8. 学习大数据需要的基础
  9. Golang实现Server和Client的TCP通讯
  10. Flash捕神--swf seeker 下载试用版
  11. 多线程中使用信号机制 pthread_sigmask()
  12. 【BZOJ】1010: [HNOI2008]玩具装箱toy(dp+斜率优化)
  13. DG半离散格式的转化---基于matlab编写
  14. hsqldb 的简单使用
  15. 实践出真知:全网最强秒杀系统架构解密,不是所有的秒杀都是秒杀!!
  16. R语言非度量多维标尺排序NMDS及一般加性模型GAM映射教程
  17. UML复习资料 软件建模技术选择 仅供参考】
  18. 等额本息和等额本金实现步骤
  19. Tensorflow Dataset API 入门
  20. hive 修改cluster by算法_疯狂Hive之DML操作(四)

热门文章

  1. 【HTML5+CSS】视频相关属性的设置-MV
  2. c语言char数组和short数组的区别,详解C语言中Char型指针数组与字符数组的区别
  3. 【无线通信】无线通信系统结构演进(2)
  4. android 字体倒影,Android开发中怎么实现一个文字倒影效果
  5. VC++6.0显示cannot compile the file***:no compile tool is associated with ....或者cannot execute program
  6. php system权限,让PHP以ROOT权限执行系统命令的方法
  7. Delta机器人结构分析及其运动学原理推导
  8. JavaSE学习笔记-Day1
  9. 2022西藏最新道路运输安全员模拟考试试题及答案
  10. php连接远程mysql_MySQL如何开启远程连接?