代码分支管理+DevOps策略实践

现在团队相关的一些背景:1、一个人维护几个系统;2、需求急且大小不一,产品经理也不会去细拆需求;3、敏捷成熟度几乎为0,没有DevOps,没有自动化测试;4、使用SVN。

将要变成:1、一个人维护更多的系统的;2、需求急且大小不一,产品经理变不了;3、引入一点点自动化;4、还是使用SVN。

开始:

一、引入Kanban,每天晨会,计划各系统版本。

二、如果版本时间小于3天(3天是经验值,并且各系统都可以不一样)直接主干开发和测试;如果版本时间大于3天,按版本号拉分支。

1、其实分支策略主要的一个目标笔者认为是减少master分支的冲突,当没人跟你冲突的时候,比如一个人维护几个系统都赶不过来时,就不用那么复杂分支又合并了。

2、但,一个人开发还面临另一个问题,就是需求不稳定。来源不稳定,大小不稳定。就会导致自己把自己冲突了,前面开发着的需求可能突然说不要了,或者紧急插入另一个需求。

3、所以这里会定一个开发时间,小于这个时间,那就直接冲什么都不要管就完事了。让你没反应过来我就上线了,真不要那就再提一个需求去下线,真还有紧急需求也等干完了这一发需求再说。

4、这个值受很多方面的影响,比如老板的忍耐程度、需求最小的颗粒度、自动化程度等。

5、那直接主干开发又怎么做呢?接下来介绍这个过程。Jenkins里配置一个主分支的任务,对应的就是代码主分支,执行如下几个过程:

5.1、svn checkout;

5.2、打包;

5.3、发测试环境并重启;

5.4、归档制品库;这里主要是模拟制品库的作用,一次打包,全流程使用(后面不要重打了)。

5.5、构建后进行静态检查;单独一个任务并且放到后面主要有两个考虑:1、可以设置定期执行;2、现在静态检查还未推行成为门禁,放后面可以让打包发布到测试环境更快。

三、如果版本的时间大于3,则需要进行分支操作。这时候在Jenkins里的SVN有个插件可以使用:svnmerge。安装此插件后按如下过程操作:

1、回到主分支的任务的配置页面,勾选如下选项并保存:

2、回到主分支的“状态”页面,这里左边的菜单栏里面会多出一个选项“Feature Branches”,点进去可以看到创建分支的功能:

Branch Name:分支名称,假设名称叫“XXX版本”,则创建成功后的Jenkins任务会命名为:主分支-XXX版本;

Commit Message:提交信息;

Branch Location:完整的SVN分支路径,一般是在 Branches下面,加上版本名称比如:http://XXX/Branches/XXX版本

3、Create成功后会有两个结果:3.1会在Jenkins里的想同目录里产生一个新的任务,任务里面的配置完全复制主分支的任务,除了svn的路径会被自动修改为分支的路径。3.2在SVN服务器上会自动从主分支里配置的SVN路径copy一份到Branch Location填写的路径,working-copy则可以使用小乌龟从这个路径里面拷贝下来开发了。

四、如果是分支开发,则每次转测的时候,需要把主分支合并到分支版本后,再打包。

这里暂时没有找到自动的方式(吐槽一下,SVN很古老的工具生态都快死光了,svnmerge这个插件有合并功能但不知道怎么配置,Jigomerge下载下来运行就出错,bat脚本的方式更是各种报错),只能用小乌龟手动执行了。

五、如果是分支开发,预发布(UAT)之前需要把所有的修改都从分支合并到主干上(同样的,用小乌龟合并吧),并且从现在开始用最短的时间使用Jenkins上主分支的任务进行打包、完整的回归测试、发布。

总结:不管用什么分支管理方式,整个过程主要关注几个点:

1、mater被独占的时间尽量少;

2、拉分支、合并代码带给开发的时间尽量少,能自动化尽量自动化;

3、能实现“一次打包、全流程不换包”则尽量遵守这个原则。但在分支场景下如果不信任工具自动合并代码的结果,那还是需要在预发布的时候做个包的切换,投入额外的时间进行全覆盖测试,不给master留下尾巴。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/242359.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第二百零四回 模拟对话窗口的页面

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 示例代码4. 经验分享5. 内容总结 我们在上一章回中介绍了"修改组件风格的另外一种方法"相关的内容,本章回中将介绍" 如何做一个模拟对话框窗口的页面".闲话休提,让我…

C语言小游戏之三子棋(可以做期末设计作业)

哈喽大家好,今天为大家带来一个用C语言写的小游戏--三子棋,就是大家小时候用树枝和石子玩的那种游戏,这个小项目可以用于大家的C语言期末设计作业,不会很难,都是C语言基本的操作 下面是游戏截图: 完全可以…

acwing-蓝桥杯C++ AB组辅导课Day1-递归

感谢梦翔老哥的蓝桥杯C AB组辅导课~ 省一刷200题 国赛拿成绩300题 比赛考察的是各种模型的熟练度,可以从dfs的角度比较各个模型与当前问题的匹配程度。 常见时间复杂度,根据时间复杂度可以判别是否可以选用这个解题思路 写递归的时候&#xff…

11 月公链盘点:Solana 强势复苏,Blast 飞速崛起,Web3 游戏市值猛涨

作者:stellafootprint.network 11 月的加密市场充满了重大事件,从比特币 ETF 的热议到币安 40 亿美元的和解,均获得了极大的关注。在以太坊继续主导 TVL 和像 Arbitrum 这样的 Layer 2 成为焦点的同时,我们也见证了 Solana 引人注…

【vue3】处理数组方法,在数组中获取指定条件所在的数组对象等持续更新笔记~~

1、在数组中获取指定条件所在的数组对象 (1)filter方法获取到的是包含指定项的数组 data.checkRow res.result.filter(item > item.checked 1);打印: (2)map方法取到的是包含指定项的数组,如果满足…

全志V3s之应用层点灯

1、全志V3s的管脚控制简介: 全志V3s一共有5个端口可以作为输入输出,其数量如图所示: 端口的基地址为:PIO : 0x01c20800。其中,每个端口都有自己的偏移地址,其偏移计算公式如表所示&#xff1a…

业务代码-整合框架-存储-缓存常见错误详解一

一. java空指针和异常: 1.什么是空指针异常(java.lang.NullPointException): 1.1常见的空指针异常案例: public class WhatIsNpe {public static class User {private String name;private String[] address;public void print…

有监督学习、无监督学习、半监督学习和强化学习

有监督学习 训练数据有标签 无监督学习 数据是没有标签的 聚类的思想:通过计算空间中的距离来判断是否属于同一类 强化学习 和环境交互,从环境中学习 三者对比 半监督学习 少量有标注,大量无标注 三个假设 1.连续性/平滑性假设:相…

关于对RF射频方面性能要求各有不同

1.1 射频天线性能 对于一个射频设备每个公司对其合格指标要求都不一,有些公司注重于阻抗及电压驻波,有些公司注重与回波损耗及阻抗、有些只关注电压驻波。 1.2 射频的目的 其实射频天线的目的就是在不把无用的杂散放大超标准的前提下,把有用…

Nature 确认:大语言模型只是没有感情的「学人精」

DeepMind、EleutherAI 科学家提出,大模型只是在角色扮演。 ChatGPT 爆火后,大语言模型一跃而至,成为了行业与资本的宠儿。而在人们或是猎奇、或是探究地一次次对话中,大语言模型所表现出的过度拟人化也引起了越来越多的关注。 其实…

使用FluentAvalonia组件库快速完成Avalonia前端开发

前言 工欲善其事必先利其器,前面我们花了几篇文章介绍了Avalonia框架以及如何在Avalonia框架下面使用PrismAvalonia完成MVV模式的开发。今天我们将介绍一款重磅级的Avalonia前端组件库,里面封装了我们开发中常用的组件,这样就不用我们自己再写组件了。专注业务功能开发,提…

SpringBoot类文件具有错误的版本 61.0, 应为 55.0

4.SpringBoot入门案例 每一个从你生命中路过的人,都在教你成长,感恩的心,感谢一程陪伴,感谢曾经有你spring learn https://spring.io/projects/spring-boot#learn Getting Started Developing Your First Spring Boot Applicati…

Tcon基础知识

1、TCON,就是 Timing Controller 的缩写。从主芯片输出的要在 TFT 显示屏上显示的数据,在经过 TCON 模块后可以变换生成 Panel 可以直接利用的 DATA 信号和驱动器(包括 source driver 和 gate driver)的控制信号。 TV 市场上 TCO…

超声波测距HC-SR04模块的简单应用

文章目录 一、HC-SR04HC-SR04是什么?HC-SR04测距的原理 二、使用步骤1.硬件最远探测距离调节硬件连接 2.软件1.初始化配置代码如下(示例):引脚初始化定时器初始化 2.引脚输入输出配置代码如下(示例)&#x…

OfficeWeb365 SaveDraw 文件上传漏洞复现

0x01 产品简介 OfficeWeb365 是专注于 Office 文档在线预览及PDF文档在线预览云服务,包括 Microsoft Word 文档在线预览、Excel 表格在线预览、Powerpoint 演示文档在线预览,WPS 文字处理、WPS 表格、WPS 演示及 Adobe PDF 文档在线预览。 0x02 漏洞概述 OfficeWeb365 Sav…

基于Leaflet的Webgis经纬网格生成实践

目录 前言 一、Leaflet.Graticule 1、参数说明 二、集成使用 1、新建网页模板 2、初始化地图对象 3、运行效果 三、源码调用分析 1、参数注入 2、经纬网构建 总结 前言 众所周知,在地球仪上或地图上,经线和纬线相互交织,就构成经纬…

揭示 ETL 系统架构中的 OLAP、OLTP 和 HTAP

探索 ETL 系统设计需要了解 OLAP、OLTP 和不断发展的 HTAP。让我们试图剖析这些范式的复杂性。 1. OLAP(联机分析处理): OLAP 是商业智能的中流砥柱,通过 OLAP 立方体进行多维数据分析。这些立方体封装了预先聚合、预先计算的数据…

31、应急响应——Windows

文章目录 一、账户排查1.1 登录服务器的途径1.2 弱口令1.3 可疑账号 二、网络排查三、进程排查四、注册表排查五、内存分析 一、账户排查 1.1 登录服务器的途径 3389smb 445httpftp数据库中间件 1.2 弱口令 弱口令途径:3389、smb 445、http、ftp、数据库、中间件…

双指针的运用——双数之和II和三数之和

两数之和 https://leetcode.cn/problems/two-sum-ii-input-array-is-sorted/description/ 我们考虑这个排序过的数组,首先一个指针在最左,一个在最右。如果这两个数字比目标数字来的要小,那么如果我们左边指针移动了,移动后一定变…

【LeetCode刷题】-- 163.缺失的区间

163.缺失的区间 class Solution {public List<List<Integer>> findMissingRanges(int[] nums, int lower, int upper) {List<List<Integer>> res new ArrayList<>();for(int num : nums){if(lower < num){res.add(Arrays.asList(lower,num -…