某银行大型管理系统端到端持续集成和交付实践


背景

传统的银行IT系统研发流程从需求提出到产品交付往往具有较长的研发周期,纵观银行当下面临的市场环境,个人信贷消费升级,资管需求旺盛,普惠金融成为国家战略,来自银行同业和互联网金融的压力扑面而来,谁先推出符合市场需求的产品谁就占领了先机,对银行IT研发的快速交付能力提出了新的要求和挑战。

传统银行IT系统研发过程中的弊端主要体现在研发流程不连贯难追溯、人工处理效率低时效差、缺乏有效的代码审查机制、人力资源浪费等,针对上述问题,我们基于持续集成、持续交付的理念,设计了针对某银行大型管理系统(下称C系统)的CI/CD流水线,开发了一系列核心组件,基于TFS (现已改名为 Azure DevOps Server)实现了端到端、线上化、全自动的持续交付。


作者:葛江浩、宋绍磊、王丽敏

供职于中国农业银行研发中心,从事信贷管理领域系统研发工作,致力于银行大型IT系统端到端全流程敏捷转型的研究与实践。


640?wx_fmt=png


  C系统是某银行重要的大型管理系统,具有多团队协作、多项目并行、多技术体系并用、多产品/模块协同、多环境并存、多时点交付等特点,是一个典型的银行大型IT系统。我们以C系统为试点,基于TFS,设计了从需求管理、任务分配、分支建立、代码提交、版本合并、自动化构建发布到自动化测试的覆盖研发全流程的持续集成和交付流水线。开发人员通过全线上操作发起版本发布申请,将代码收集、版本核对、构建发布等重复性工作自动化、线上化,提高了版本交付的效率与质量、释放了人力资源。


640?wx_fmt=png

1 持续集成和交付流水线模型


1. 自动化代码静态扫描

代码静态扫描是控制代码质量的重要手段。对于C系统来说,原有的人工触发全量检查方式是一种被动的事后检查策略,在发布生产环境前检查,每次检查至少需要3个小时,且需要人工甄别增量违例,时效性差、工作效率低、修改成本高等问题突出。

为解决上述问题,我们深入研究了TFS APIJTestCChecker等静态检查工具,通过文件哈希值比对等技术手段,对代码合规检查组件和邮件通知组件进行了深度定制,形成了一套按需增量检查+定时全量检查相结合的代码合规检查策略,并能够向相关负责人精准发送违例代码通知。


640?wx_fmt=png

1 代码合规检查调用的TFS API列表


我们将代码合规性检查集成到持续集成和交付流水线中,在开发人员申请将代码合并到测试版本库或准生产版本库时,自动触发代码合规性检查步骤,并自动解析检查报告,若存在新增违例,则禁止代码合并,并向代码提交人发送邮件通知。

640?wx_fmt=png

2 分支策略中配置的代码合规性检查


640?wx_fmt=png

3 代码合规性检查存在新增违例的日志信息


2. 代码强制评审

代码评审主要包括两方面内容:一是C系统由多个模块构成,每个模块由不同的开发人员负责,当出现跨模块的代码修改时,须由该模块的负责人评审改动内容的准确性;二是系统中存在一些公共配置文件,这些文件改动后可能会对整个系统产生影响,须由资深的系统研发人员进行评审。

我们借助TFS拉取请求中的审阅者功能,设计了满足C系统特点的代码强制评审策略,有效避免了误审、漏审、甚至不审等弊端。

我们首先在TFS中创建了C系统各模块的开发人员团队,并在分支策略中配置了各模块对应的代码路径。


640?wx_fmt=png

4 分支策略中配置的模块负责人


当开发人员提交代码时,TFS会自动判断是否存在跨模块的代码修改,并在拉取请求的审阅者中自动添加模块负责人作为必须的审核人员,只有通过审核才能进行后续的代码合并。


640?wx_fmt=png

5 代码合并时的强制代码审核


3. 持续集成持续交付

持续集成持续交付是提高研发效率、保证产品质量至关重要的一环,我们编写了一系列构建组件,通过TFS进行组件编排,完成不同环境的持续集成和交付需求。

640?wx_fmt=png

6 TFS构建中的组件编排


C系统前台使用java语言开发,以一个完整程序包的形式进行发布。对于日常的研发,将构建发布配置为定时模式,每周一至周五12:0018:00定时自动构建发布,满足日常测试需要。


640?wx_fmt=png

7 定时构建发布配置


对于时效性强的敏捷类项目,将构建发布配置为实时模式,每当有代码提交时便触发构建发布,测试人员可及时介入,缩短开发测试周期。


640?wx_fmt=png

8 实时构建发布配置


C系统后台功能使用c语言开发,运行在AIX平台,无法直接使用TFS的构建功能,经过一系列的技术攻关,我们借助Jenkins自主实现了一套c程序构建发布的方法,解决了TFS Agent不支持AIX平台的技术难题,统一了C系统前后台的构建发布流程,为开发人员提供了简约一致的使用体验。


640?wx_fmt=png

9 基于AIX平台的C程序构建流程


c程序具有相对独立、依赖关系弱的特点,所以均采用由开发人员自主触发的实时交易构建发布模式,每个开发人员可按需独立发布程序,在构建参数中填入待发布的程序名即可。


640?wx_fmt=png

10  C程序自主构建发布


4. 自动化测试

版本质量是研发的根本落脚点。我们构建了基于Ant+Junit+Selenium的功能测试框架,将测试流程集成到持续集成和交付流水线,实现了业务测试版本和准生产版本的回归测试,每日定时执行业务核心流程案例,缩短了版本验证时间,提升了投产版本的可靠性,有效降低了投产风险。


640?wx_fmt=png

1. 需求条目化和开发

项目经理从项目的角度,以“项目->模块->功能->任务”结构对需求进行条目化拆分,录入TFS,由项目组成员完成任务认领。随后基于各自的任务开展需求分析、设计、开发和测试等工作。


640?wx_fmt=png

11 TFS工作项管理层次


640?wx_fmt=png

12 TFS工作项示例


TFS中配置开发分支自动编译,当TFS检测到新的提交后,获取代码并自动编译,若编译失败,则会自动向代码提交人发送邮件通知。


640?wx_fmt=png

13 TFS开发分支自动编译配置

2. 测试版本发布


640?wx_fmt=png

14 测试发布总体流程


开发人员通过TFS工作项和Git的拉取请求(pull request)功能申请将改动的代码合并到测试分支。


640?wx_fmt=png

15 TFS工作项申请Git分支


640?wx_fmt=png

16 TFS创建拉取请求页面


配置管理员在TFS中对测试分支配置分支策略,主要包括:

Ø 必须使用拉取请求的方式向测试分支提交代码

Ø 所有拉取请求都需要经过至少一个人审阅

Ø 所有拉取请求都要关联工作项

Ø 配置分支合并时触发的预编译定义

Ø 配置代码审查人员


640?wx_fmt=png

17 TFS分支策略配置页面


TFS提交拉取请求后,可以在web页面查看拉取请求状态,包括必须满足的条件、链接的工作项、审阅者、变更内容等,所有条件满足后即可完成代码合并。


640?wx_fmt=png

18 TFS拉取请求页面


完成代码合并后,会自动触发TFS中配置的程序自动发布定义,完成测试环境程序包的部署。


640?wx_fmt=png

19 C3前台自动部署配置


3. 投产版本发布

640?wx_fmt=png

20 投产发布总体流程


TFS中创建投产团队,从系统的角度,以“系统->窗口->职能组->投产内容”的逻辑层次管理投产内容。开发人员通过工作项发起投产申请,填写投产内容并通过TFS文档库管理投产文档。填写完成后将投产申请指派给配置管理员进行审核。


640?wx_fmt=png

21 TFS投产团队工作项


配置管理员根据投产日期创建准生产分支


640?wx_fmt=png

22 配置管理员创建的准生产分支


开发人员申请将已完成测试的待投产代码合并到准生产分支


640?wx_fmt=png

23 创建合并到准生产分支的拉取请求


拉取请求预编译、评审等工作与测试发布流程一致。

完成所有待投产内容到准生产分支的合并后,配置管理员在TFS中创建投产标记(基线),基于该标记触发准生产版本的自动构建,生成投产包,发布到准生产环境供开发人员进行投产前的最终验证,验证完成后在投产窗口将程序部署到生产环境。


640?wx_fmt=png

24 TFS创建标记页面


640?wx_fmt=png

基于TFS的端到端持续集成和交付流水线在C系统中的正式应用实现了研发流程自动化、线上化、可追溯的目的,提高了系统研发效率、保证了研发质量、释放了人力资源、缩短了产品交付周期,是银行大型IT系统研发模式转型的一个典型实践。银行IT系统研发流程的DevOps转型任重道远,是一个渐进式的过程,我们会对流水线模型进行持续改进优化,不断适应业务和技术的新需求,探索出一条满足银行IT特色的DevOps之路。



640?wx_fmt=other微软DevOps技术社区持续招募中


640?wx_fmt=png


我们的DevOps社区仍然继续招募中,希望加入的小伙伴可以扫描下面的【DevOps社区运营助手】二维码添加好友并申请入群。


640?wx_fmt=png


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

排列组合十一个性质公式及证明,错排数公式及证明

文章目录排列数组合数求组合数常用公式定义式递推式杨辉三角组合数常用性质及证明性质一性质二性质三性质四(二项式定理)性质五性质六性质七性质八性质九性质十性质十一错排数排列数 从nnn个物品中不放回地依次选mmm个物品,考虑顺序,有多少种方案&#…

引入用于 Azure IoT Edge 的 Visual Studio 工具

物联网开发人员:工具和经验引入用于 Azure IoT Edge 的 Visual Studio 工具今天,我们很高兴地发布用于 Visual Studio 2017 的 Azure IoT Edge 工具的预览版。Azure IoT Edge 是一个全托管服务,通过直接在跨平台物联网设备上部署并运行人工智…

P4878 [USACO05DEC]Layout G

P4878 [USACO05DEC]Layout G 题意&#xff1a; 题解&#xff1a; 这个题其实是差分约束的裸题&#xff0c;但是有几个坑要注意 1.题目说了&#xff0c;奶牛按照编号1…N排列&#xff0c;对于ML个输入&#xff0c;A< B ,所以关系是B - A < 10,而不是A - B <10,我一开…

【学习笔记】原根 / BSGS / 扩展BSGS证明及模板

文章目录原根BSGS大步小步算法扩展BSGS原根 如果两个整数a,ba,ba,b互质&#xff0c;则有aϕ(b)%b1a^{\phi(b)}\%b1aϕ(b)%b1 定义模bbb意义下的aaa的阶为使ad%b1a^d\%b1ad%b1的最小正整数ddd 显然&#xff0c;模bbb的阶d∣ϕ(b)d|\phi(b)d∣ϕ(b) 如果模bbb意义下aaa的阶为…

.Net Core分布式部署中的DataProtection密钥安全性

在.NetCore中默认使用DataProtection来保护数据&#xff0c;例如Cooike等。一般情况下DataProtection生成的密钥会被加密后存储&#xff0c;例如默认的文件存储可以看到使用了Windows DPAPI加密。但是如果更改默认设置例如使用的外部存储如redis则此时密钥默认是不加密的微软说…

scanf(“%s“)真的只开读入字符串大小就可以了吗??

文章目录前言还原过程计算机程序背后的故事总结瞎逼逼前言 艹艹艹艹艹艹&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;老子没想到没想到&#xff0c;靠&#xff01; 本人刚刚在做树链剖分“染色”一题的代码重构&#xff0c;上午打…

P5299-[PKUWC2018]Slay the Spire【dp】

前言 正题 题目链接:https://www.luogu.com.cn/problem/P5299 题目大意 有2n2n2n张牌&#xff0c; nnn张强化牌&#xff0c;每张上有一个正整数x(x>1)x(x>1)x(x>1)&#xff0c;如果使用后之后的每一张攻击牌伤害都会乘上xxx。nnn张攻击牌&#xff0c;每张上有一个正…

asp.net core2.2 多用户验证和授权

asp.net core2.2 用户验证 和授权有很详细和特贴心的介绍&#xff0c;我感兴趣的主要是这两篇&#xff1a;cookie身份验证基于角色的授权我的项目有两类用户&#xff1a;微信公众号用户&#xff0c;用户名为公众号的openid企业微信的用户&#xff0c;用户名为企业微信的userid每…

P1494 [国家集训队]小Z的袜子

P1494 [国家集训队]小Z的袜子 题意&#xff1a; 有一个长度为 n 的序列c[i] 。现在给出 m个询问&#xff0c;每次给出两个数l,r &#xff0c;从编号在 l 到 r 之间的数中随机选出两个不同的数&#xff0c;求两个数相等的概率。 题解&#xff1a; 很明显&#xff0c;莫队算法…

一文带你快速读懂.NET CLI

dotnet cli 是 .Net Core 功能中最有用的特性之一。在这篇文章里&#xff0c;我们将介绍几个.Net OSS 工具是如何使用 dotnet cli&#xff0c;并介绍如何在日常开发中使用新的 cli 工具。正文关键要点dotnet cli 使得基于. Net 项目的自动化和脚本编写变得非常简单&#xff0c;…

[POJ 3164]Command Network(最小树形图,朱刘算法)

文章目录titlesolutioncodetitle solution 读完翻译后&#xff0c;很明显就是个朱刘算法的板子题 最小树形图&#xff0c;就是给出一个带权有向图 从中指定一个特殊的结点 root 求一棵以 root 为根的有向生成树 T&#xff0c;且使得 T 中所有边权值最小 简单来说&#xff0c…

ASP.NET Core 3.0:将会拥有更少的依赖

在ASP.NET Core项目中&#xff0c;我们使用一个叫做Microsoft.AspNetCore.App的综合包。它也被称为ASP.NET Core Shared Framework&#xff0c;在ASP.NET Core Shared Framework之中包含了很多依赖项&#xff0c;它能满足一般应用的需求。但是如果你查看它的依赖项&#xff0c;…

CSP2021NOIP2021游记

CSP Day -? 初赛 初赛考前没怎么复习&#xff0c;反倒是理直气壮的翘了一周晚修&#xff08;虽然后面就一直翘了&#xff09;。 开考之后才发现要拿那几张纸&#xff0c;监考让我考完再出去拿。 选择题很简单&#xff0c;没有啥犹豫的写完了&#xff0c;第一道读程序写结果好…

微软上线Try .NET,支持在浏览器运行C#代码

微软Try .NET项目近期上线&#xff0c;这一项目允许用户通过浏览器运行和编写C#代码&#xff0c;同时还支持完整的代码提示。用户可以通过访问这一项目官网&#xff08;点此进入&#xff09;对Try .NET这一项目进行简单了解。该项目允许开发人员在浏览器中运行和编辑C#代码片段…

[LOJ]体育成绩统计 / Score (无脑模拟,没有脑子,就是上!)

题目 好久没敲过恶心的模拟题了&#xff0c;莫名有点怀念是什么鬼&#xff0c;我还记得我的zamjena 没啥想说的&#xff0c;这道题就是没智商有码力的 纯粹是纪念一下今天上午直接肝了的两个半小时&#xff0c;真的一点思维都不需要有&#xff0c;直接上&#xff01;&#xff0…

程序员修仙之路--设计一个实用的线程池

菜菜呀&#xff0c;我最近研究技术呢&#xff0c;发现线上一个任务程序线程数有点多呀CEO,CTO,CFO于一身的CXOx总&#xff0c;你学编程呢&#xff1f;菜菜作为公司总负责人&#xff0c;我以后还要管理技术部门呢&#xff0c;怎么能不会技术呢CEO,CTO,CFO于一身的CXO&#xff08…

Code Names

Code Names 题意&#xff1a; 如果一个字符串通过交换两个位置可以得到另一个字符串&#xff08;也就是两个字符串只有两个位置不一样且为交换关系&#xff09;&#xff0c;我们称这两个字符串为替代关系。 现在给出n个字符串&#xff0c;求一个集合&#xff0c;使得集合内的…

【2020牛客NOIP赛前集训营-提高组(第一场)题解】( 牛牛的方程式,牛牛的猜球游戏,牛牛的凑数游戏,牛牛的RPG游戏)

未完待续...T1&#xff1a;牛牛的方程式titlesolutioncodeT2&#xff1a;牛牛的猜数游戏titlesolutioncodeT3&#xff1a;牛牛的凑数游戏titlesolutioncodeT1&#xff1a;牛牛的方程式 title solution 因为浮点错误炸了70pts 这个三元一次不定方程呢&#xff0c;其实也没有…

程序员修仙之路-数据结构之 CXO让我做一个计算器

菜菜呀&#xff0c;个税最近改革了&#xff0c;我得重新计算你的工资呀&#xff0c;我需要个计算器&#xff0c;你开发一个吧CEO,CTO,CFO于一身的CXOX总&#xff0c;咱不会买一个吗&#xff1f;菜菜那不得花钱吗&#xff0c;一块钱也是钱呀这个计算器支持加减乘除运算就行&…

P5518-[MtOI2019]幽灵乐团【莫比乌斯反演,欧拉反演】

正题 题目链接:https://www.luogu.com.cn/problem/P5518 题目大意 TTT次给出A,B,CA,B,CA,B,C求以下三个式子 ∏i1A∏j1B∏k1Clcm(i,j)gcd(i,k)\prod_{i1}^A\prod_{j1}^B\prod_{k1}^{C}\frac{lcm(i,j)}{gcd(i,k)}i1∏A​j1∏B​k1∏C​gcd(i,k)lcm(i,j)​ ∏i1A∏j1B∏k1C(lcm(…