在开发方面,由于我行开发语言种类较多,不同的语言需要不同的私服,不便于管理维护和安全扫描;在投产方面,SVN+FTP传递制品的方式已经无法满足上云的应用,在多种产品的选型中,我们选取了JFROG-Artifactory作为民生银行统一制品仓库,来管理、存储、分发全行级的制品。经过一年多的适配,制品仓库已经与我行DEVOPS平台(pset+eva)、工单流程平台、容器平台、CMDB等关键系统丝滑对接。我们建设的初衷是,规范民生银行制品投产流程,提高制品质量,加速制品投产效率。我们从SVN+FTP切换到制品仓库的理念是,把更多的工作做到DEVOPS平台上,尽可能对用户无感,减轻科技人员负担。

民生银行制品仓库的应用

支持全开发语言依赖

全行级制品管理

适配行内系统

接下来建设计划

一、支持全开发语言依赖

1.1 统一私服

由于开发语言种类多,各项目组根据情况搭建自己的私服。这样不便于依赖的管理和安全扫描。而且许多公网的依赖源,各个私服自己代理,这样会造成很多不易排查的问题。

以maven为例,部分项目组在自己私服上传了jar包而没有上传pom文件,私服默认根据gav创建了一个没有依赖的pom文件。这样各项目组在本地自己构建的时候没问题,如果在pset集中构建,有可能先构建的是错误的pom文件的项目,后续也有这个依赖的项目由于拉不到传递依赖就有可能会构建失败。

制品仓库对公网的主流仓库进行了代理,并且将公网仓库作为优先的依赖源,这样可以避免因为公网依赖导致的构建问题。

并且我们提供了一套用于上传的公共仓库,解决了公共依赖上传重复,维护混乱的问题。

1.2 权限管理

各种私服大多数是对单个用户进行授权,权限关系不好维护。

因为制品仓库在身份认证和准入管理方面有user,group和permission三种资源,我们在开发环境能够更加方便的从pset同步权限。我们编写代码并做成每日定时任务,从pset同步用户和权限。pset每个模块都有只读,编辑和管理员三种权限,在制品仓库中也根据模块创建三个group分配同步pset三种权限中的用户;然后为每个模块创建permission将对应的group和需要操作的仓库进行关联,这样就可以将pset对应模块对应权限的用户与制品仓库的访问权限绑定上,无需每个用户单独配置权限。用户与模块,模块与仓库的关系非常清晰,易于管理。生产环境从cmdb也采用相同的方式进行权限同步和维护,同时也实现了各个模块之间权限的隔离。

1.3 仓库管理

制品仓库分local仓库,remote仓库和virtual仓库。由于local仓库的可以上传的特性,我们将其作为行内公共包和项目组私有包的上传仓库。对于项目组之前自己搭的私库中的文件,也可以使用插件将文件同步到自己的私库中,所以用户可以很方便的切换到制品仓库。

remote仓库可以代理其他远端的仓库,我们用来代理之前行内的公共仓库和公网的一些公共仓库。如果用户发现自己依赖的公网包在现代理的公网仓库中没有的情况下,可以跟我们反馈,我们根据情况申请代理,代理对应的公网仓库。

virtual仓库里面可以维护local,remote和virtual三种类型的仓库。以maven仓库为例,其实公共仓库,包括之前行内的公共仓库和代理公网的公共仓库有将近三十个仓库,我们将其整合成三个虚拟仓库作为公共仓库供用户使用,后续我们调整仓库或者新增仓库,对于用户都是不受影响的,这就解决了用户老是修改依赖仓库配置的问题。为用户创建的仓库有release和snapshot两个虚拟仓库,release和snapshot两个local仓库,并在release虚拟仓库中添加了release的local仓库以及两个公共的release虚拟仓库,在snapshot虚拟仓库中添加了snapshot的local仓库和公共的snapshot虚拟仓库。用户在配置上传和下载仓库的时候只需要配置他们模块的两个虚拟仓库就可以满足上传需求,能够同时下载到自己项目的包和公共仓库的包。

1.4 高可用

开发环境采用的是双节点高可用,如果其中一个节点异常,流量可以自动分配到另外一个节点,提供服务。

生产主从高可用F5架构,正常马坡集群向外提供服务,在马坡集群异常的情况,F5可以将流量切换到鹏博士集群继续提供服务。由于开发环境投产文件是向马坡和鹏博士两个集群双推的,来确保双数据中心一致。

二、全行级制品管理

2.1 投产文件按照标准目录格式进行存放管理

标准目录结构如下:

模块仓库

版本名称

服务单元名称(如果包含中文转成拼音小写)

文件分类

文件名称

文件分类分为5种类型,作用分别如下:

artifact存储镜像、tar、jar、war等二进制文件

config存储配置文件

sql存储sql文件

yaml存储yaml等部署文件

other存储其他类型的文件

2.2 为存储的文件添加元数据

制品仓库支持对存储的文件添加元数据,现在已经把jira号作为元数据添加到投产文件上面,后续还要打测试相关的质量数据,来做质量门禁。

2.3 开源软件黑名单

在开发、测试、安全扫描、生产运营等过程中,一旦发现某个开源软件及相关版本有安全、严重性能等问题,即可申请将其加入黑名单。

加入黑名单的申请,由安全条线审核,是否加入黑名单。由安全条线根据CVE等安全漏洞网站发布的漏洞信息,定期(如半年/一年)对开源软件仓库里的开源软件进行安全检查, 一旦发现问题,立即加入黑名单。

一旦加入黑名单,立即从开源软件仓库移除,并通知所有使用的项目组,按期整改。

三、适配行内系统

3.1 与pset对接

pset(软件工程支撑平台),负责软件需求到软件交付的全生命周期管理。制品仓库通过与pset集成,来实现对上层用户透明,用户只需要少量配置,即可从DTR、SVN、FTP切换到制品仓库,通过与pset协定,使用不同成熟度的仓库,并按照规范存放制品。

3.2 与itoms对接

itoms(IT运维管理系统),负责数据中心所有变更流程。制品分发到生产环境必须与流程相关联。通过与itoms工单系统对接,实现了工单审批通过,同步传输制品到生产环境。

3.3 与eva对接

eva(伊娃自动化运维平台),负责数据中心所有调度、发布任务。在制品存放路径标准化的基础上,与eva实现了容器应用一键发布,运维人员只需选择发布的版本号,即可关联出所有投产制品和发布流程。

四、接下来建设计划

4.1 带宽扩容

计划对带宽进行扩容,以增加制品仓库的传输速度和响应时间。

4.2 支持总行以外的机构部门

目前主要是总行的项目使用制品仓库存储构建介质和流转生产介质,后续总行以外的信用卡中心和分行也将使用总行的制品仓库进行投产。

4.3 版本升级

(1) peer-to-peer:

在k8s集群的机器上面安装插件,插件会收集镜像的下载信息,当集群中的部分机器因为意外故障重启之后需要重新下载镜像的时候,优先从集群中的其他有该镜像的机器进行下载,从而有效减轻,当数据中心级灾难时,几千上万个容器节点同时从制品仓库下载镜像爆发式的压力。

(2) edge:

edge相当于是只有下载功能的Artifactory,由于edge成本低和不能修改的特性,可以让研发中心使用Artifactory,让总行、信用卡、分行等机构使用edge,edge承担一个分流的角色,通过研发中心Artifactory分发制品给各个数据中心edge,然后各个数据中心从本地的edge消费。(沈啟黄、王鹏)

关键词: 民生银行 信源 企业级