农行运营合规管理心得体会_农行 PaaS 云镜像接入制品库管理实践

5e6a734f078db965a237ec547b7a10e4.gif

f4293e99f9d9dfea719602f4a4bb010c.png 我行信贷中台等5个项目顺利通过 DevOps 持续交付标准3级评估,代表着我行软件研发运维一体化能力达到国内领先水平。在 DevOps 工程实施中,制品库承上启下,成为 DevOps 持续集成持续交付工具链的枢纽中心:

0da0c9186e0e062857daad0409cdcaaf.png

制品库不仅承担应用系统编译依赖组件的管理,而且对应用系统编译输出的制品进行了规范管理,从而替代了传统粗粒度的制品管理方式(比如搭建简易 FTP 来提供制品下载),解决了传统管理方式下制品版本无法跟踪、无法提供制品与组件视图等问题。

随着我行 PaaS 云建设进展,越来越多的应用系统实现了云构建和云部署。在应用系统上云过程中,镜像制品规范管理是基础保障。本文主要分享 PaaS 云镜像如何纳入制品库管理以及相关规范要求。

制品库管理框架

0f4e178a69a77d6c2c4aaa9b9b4c2355.png

镜像制品分为三大类:编译镜像,基础镜像以及应用镜像;其中编译镜像和基础镜像由组织级统一管理和维护:

0d140aca399b44bd9f0db8d5c4848580.png

应用镜像又分为自动构建镜像、自定义镜像以及公共镜像三大类,其中自定义镜像、公共镜像采用审批上传方式进行管理。自动构建镜像通过持续集成流水线(jenkins或者TFS)接入制品库。应用镜像仓库分为以下四个类别:
  • abc-docker-dev(开发仓库,用于管理开发版本,可上传)
  • abc-docker-test(测试仓库,用于管理测试版本,可上传、晋级)
  • abc-docker-prepord(待投产仓库,不可上传,只能晋级)
  • abc-docker-prod(投产版本,不可上传,只能晋级)
注意 :应用镜像自动上传制品库,必须严格遵循镜像标签tag命名规范,如:“{Build.SourceBranchName}_{Build.BuildNumber}_[项目组自定义]”,且首次只能上传到开发仓库或者测试仓库;在开发版本或测试版本通过DevOps各项质量门禁后,可以晋级到待投产仓库和投产仓库。

通过以上制品分类、管理规范、流程策略等多措施,确保了镜像制品的版本可追溯性以及安全管理。

Jenkins 应用镜像制作流水线对接制品库

72cd3b91e980bb1c518ddc90a8c21d9e.png

项目组通过TFS(Team Foundation Server)调用PaaS云上的jenkins流水线实现持续集成,具体步骤如下:
  1. 通过Jenkins配置CI、CD任务,CI任务包括源码仓库配置、构建触发条件配置、构建配置等,CD任务包括部署YAML配置、构建环境配置、部署命令配置等;
  2. 在TFS中,配置Jenkins连接信息、Jenkins作业信息等,然后通过手工触发或者设定的时间等方式触发持续集成/持续部署;
  3. TFS调用Jenkins进行构建;
  4. Jenkins CI服务从TFS源代码仓库将源码下载下来,构建应用包,然后使用应用包构建应用镜像,之后把构建出来的镜像推送到镜像库,镜像推送到制品库代码实现:48700e5f43da37a0e97ed1f5f091bf42.png

  5. Jenkins CD服务通过自动化部署命令触发PaaS平台从镜像仓库中拉取镜像部署到开发测试PaaS云中进行部署。
  6. 最后Jenkins将构建的日志发送给TFS,在TFS中实时查看构建的相关报告。

TFS 应用镜像制作流水线对接制品库

07e3a0f6efa662bc4eebe7b891d77ccc.png

由于TFS工具集成了docker以及k8s等云部署插件,故项目组也可以直接在TFS平台定制实现云构建和云部署流水线,具体步骤如下:

  1. 在TFS配置CI、CD任务,CI任务包括源码仓库配置、应用构建配置、镜像构建配置、镜像推送配置等,CD任务包括K8S服务连接配置、镜像仓库连接配置、部署命令配置等;

  2. 在TFS中,通过手工触发或者设定的时间等方式触发持续集成/持续部署;

  3. TFS CI服务下载源码构建应用包,然后使用应用包构建应用镜像,之后把构建出来的镜像推送到镜像仓库,下图为某个应用系统在TFS中的编译、docker镜像制作以及镜像上传制品库流水线:1fd504fd5d2d2a76a30eaae6ad364d1b.png

  4. TFS CD服务通过自动化部署命令触发PaaS平台从镜像仓库中拉取镜像部署到开发测试PaaS云中进行部署。

  5. 最后在TFS中能实时查看到构建的相关报告。

关于制品晋级

镜像制品入库后,通过晋级的方式实现制品位移:dev(开发)、test(测试)->prepod(待投产)->prod(投产):

普通晋级(test->preprod、dev->preprod)

dev、test、preprod之间的晋级由项目组根据研发进度按需展开;一般来说,晋级制品应当满足单元测试、代码合规、安全等各项质量门禁要求。

投产晋级(preprod->prod)

项目组通过生产变更单的方式将待投产镜像制品自动晋级到投产仓库中,最后由部署部门从投产仓库中获取镜像进行部署运维。

结束语

制品库是连接持续集成与持续交付的关键实践。它提高了开发人员的工作效率和协作,同时推动 DevOps 和持续交付目标。

PaaS云镜像接入制品库管理,不仅确保了镜像制品版本的可追溯,而且加强了项目团队高效有序的协作,例如开发、测试、运维、CI/CD 人员,通过统一的制品库,按需获取版本(开发版本、测试版本、待投产版本和投产版本)。最后组织级按需设置制品库的开放程度,以及按需设置各成员的制品访问权限,提高企业数字资产保密性、安全性的同时,又保留一定的开放性,真正做到精细化安全管控。

作者介绍

熊厚余、庄鑫鑫、谢溥芸懿,农业银行研发中心系统支持部云上构建支持团队,负责PaaS云上应用构建流程建设以及制品管理研究,为各应用系统落地实施DevOps持续集成提供技术支持。


2020年6月19日,由云计算开源产业联盟指导、高效运维社区和 DevOps 时代社区联合举办的 GNSEC 2020 全球新一代软件工程线上峰会上,隆重发布了 DevOps 标准持续交付部分第七批评估结果。

中国农业银行本次参评的 5 个项目均顺利通过由中国信息通信研究院(以下简称信通院)开展的《研发运营一体化( DevOps )能力成熟度模型》持续交付部分3级评估。

7afc4f1ea3dd46a2dfb2afea5ddad155.png

中国农业银行通过 DevOps 标准持续交付部分的 3 级评估的项目,分别是:
  • 信贷中台项目
  • 个人网银项目
  • 分布式应用互联平台(AIR)项目
  • 增值税进项税管理项目
  • 金融小店项目

DevOps 标准共分5级,持续交付部分如果能达到 3 级已经是国内领先水准,这代表着中国农业银行在参评项目的持续交付能力达到国内领先水平。

中国农业银行多个项目通过 DevOps 持续交付标准3级评估相关报道:

重磅!中国农业银行多个项目通过 DevOps 持续交付标准 3 级评估,相关项目能力达到国内领先水平!

线上金融 DevOps 排头兵:农行个人网银系统实践

助力技术中台数字化转型,探索农行 DevOps 实践之路

社交营销与 DevOps 共舞,农行金融小店 DevOps 落地实践

度量驱动 DevOps 转型:中国农业银行 DevOps 度量体系建设实践浅析

试点项目背后的支撑:农行研发中心 DevOps 工具链集成揭秘

数据驱动,让 DevOps 看得见,摸得着

c5701199a910d6d726643dc2f707ac6f.png点个“在看”,少个bug
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
刚刚发布的ThoughtWorks技术雷达 建议技术团队“暂缓或谨慎”使用反模式“CI theatre(伪CI,可以理解为不完整的持续集成)”。 “伪CI”描述的是实践持续集成(CI)过程中的一些错觉,然而这些并不是真正的CI实践。 基于持续集成,我和同事 Emily Luke做了一些研究, 我将分享伪CI是什么样的,为什么我们建议你“暂缓或谨慎使用”,以及预防伪CI的方法。持续集成我最喜欢的CI定义来自于continuousdelivery.comCI开发人员定期(至少每天)将他们所有的工作集成到主干(也称为主线或主干分支)这个引用中暗含了CI实践的两个基本原则。第一个是“把他们所有的工作集成到主干”;第二个是“至少每天”。对于CI还有一系列其他原则和实践,例如:将所有内容都检入您的代码,构建每个提交,自动化构建,保持快速构建,并有可以自我验证的代码, 还有Martin Fowler 关于持续集成的评论中的可视化故障并立即修复故障等。我个人认为 每天至少检入代码到主干分支一次 是CI的基础。没有达到这一点就只是伪CI而不是真正意义上的CI。伪CI是什么样的?这是我们调研到的一个故事,一位经验丰富的开发人员(让我们称他为David)来自湾区的一个中型创业公司,每周有两次产品交付。 David说他的组织正在践行CI,他说:“是的,我们用Circle CI”,他描述了一个具有挑战性的场景,曾经在一个分支上工作了一段时间,大约修改了100个文件和7000行代码,然后在代码审查阶段就开始招架不住了,因为他要向他的同事解释所有的代码变更的原因。“最具挑战性的事情是你最终要将一大堆功能集中到一个提交里,因为它们都是这个组件的一部分”,他解释说:“我希望有一个更好的方式来分解这些提交,因为很难把所有事情(变更历史)记在脑子里。”如果这个情况你听起来很熟悉,那么你也在做伪CI。 如果有下面的这些场景,那么你们就是在做伪CI:当有人问起你们在实践CI吗? 如果你说我们有一个CI服务器并且我们使用X工具在我们的调查中,只有10%的参与者承认有CI服务器与CI践行不一样。 相反,90%的个人表示他们正在践行CI,无论他们是否有专门从事CI的基础知识。 所以简单的认为只要有一个CI服务器就是“在做CI”,这就清楚地表明是在做“伪CI”。使用长期开发分支,但不会定期检入master主干在David的故事中,他们并没有实践每天检入master主干,这就是“伪CI”的标志。 这是我们在调研中常看到的一种模式,其中团队在master主干上运行CI,但不频繁构建,也不是每天都在提交。 或者他们在分支上运行CI,但不会频繁的集成到master主干。 只对特性分支运行CI,其实应该称之为持续隔离(continuous isolation)才对.合并分支时感到焦虑和疲惫真正的持续集成要把代码所有者的责任意识扩展到整个团队。 这改变了团队内部人员的观点以及他们对失败构建的态度。 不再是“我的宝贵的分支”,或是“我的错误导致构建被破坏”,而是“我们的代码”和“我们的失败”。David遇到焦虑和疲惫的事实清楚地表明,他忽略了CI的一个重要的优势:持续反馈和代码集体所有权。伪CI还有更多的一些现象,虽然我们发现有一些并不那么常见,但它们仍然存在一些问题,构建的时候,仅有极少的测试覆盖允许构建长时间处于失败状态虽然David的团队引入了一个备受尊崇的CI工具和常见的流程,如特征分支和代码审查,但他们并没有实施全套CI实践,因此错过了许多好处。 我们遗憾的发现,在我们的研究的组织中90%发生了这种情况。一些组织实施伪CI中反而错失了CI的主要优势 - 快速反馈,代码集体所有权,并准备达成持续交付如何避免,预防和解决伪CI的问题?如果您确定可能正在遭受伪CI之苦,则可以通过三种方式来解决问题并进行持续改变。1. 提交更频繁回到根本,尽量频繁地提交,每天至少提交一次应该是最低目标。 如果你还没有开始做CI,这就是你可以开始的地方,即使你在做CI,依然会有改进的空间。我喜欢“频率降低难度”的说法。 往往我们在做一些事情时,任务变得越小,则其更容易被实现。 持续集成就是是一个典型例子。 我的建议是要更加频繁地检入你的代码到代码并且将开发分支集成到主干分支,至少每天集成一次”。2. 基于主干分支开发有很多论坛在讨论基于主干还是基于开发分支进行开发,我不想讨论那些血淋淋的细节。 然而,在我们的调研中,当我们与一些曾经在实践CI过程中感到痛苦的人交谈时,没有引入主干开发的团队对此有更深刻的感受。 DevOps现状调查报告-2016 还发现,基于主干开发和持续集成是达成持续交付的关键因素,同时也能建设更高效能的团队。基于主干的开发肯定会有一定的挑战,但它可以把问题提前暴露出来,而不是要等到代码合并、代码审查甚至到延迟发布的时候。如果你想达到更好效果的CI和CD,我建议在主干上做开发,或者如果你更愿意使用短周期的临时分支(合并到主干之前不到一天)进行开发,那么最好同时不要超过三个以上的活跃分支。3. 自动化自动化是做好持续集成的基石,所以如果你还没有自动化一切,现在是开始的好时机。 如果你认为已经实现了所有自动化的功能,那么每次有人手动地做任何事情超过一次,便要问自己“这个为什么不能自动化”? 我已经观察到自动化不仅可以帮助您在CI中变得更好,还可以帮助您开始持续交付。总结现在你知道什么是伪CI了,如果你的团队正在这么实践伪CI,那么你可以阻止这种情况继续发生了。 如果您仍然感到困惑,我建议你在Martin Fowler的博客“CI Certification test”做一个测试, 以确认你的组织是否正在做可靠的CI。 如果你通过了CI测试,那太好了,现在是考虑您是否准备好实施持续交付的时候了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值