尝试提供自动化地增量包发布部署的一站式解决方案。

1. 前言

笔者所从事的电子政务软件研发,更新部署一直是一个非常让人头疼的问题:

  1. 绝大部分应用都位于内网,与互联网逻辑甚至物理隔离。
  2. 应用被部署到多个地方,而各地需求不一致的现象属于基本操作。
  3. 最终生成的部署包体积较大,而地方上网速一般都不太好,"修改五分钟,传输半小时"的现象时有发生。
  4. …等等。

鉴于此,痛定思痛之下,笔者自主构想研发了一套基于Jenkins+Nexus的增量包发布平台,以期减缓和消除这类痛苦。

2. 实现

相关流程图参见 流程图 - 基于Jenkins+Nexus实现增量包自动发布 。

以上流程图中表明关键点有以下几个:

  1. 如何实现配置化地增量打包?
  2. 新增量包出现时如何第一时间通知匹配的运维人员?
2.1 配置化地增量打包

以下以SVN为例,举例说明如何实现增量打包功能(笔者本次使用的开发语言为Linux系统自带的Python2.7)。

jenkins 为啥打包那么慢 jenkins增量打包_Jenkins

cd /root/svn
	python svn_modules.py ${CHILD_MODULE_NAME} ${INCREASE_PACK_RANGE} ${VERSION} ${DESCRIPTION} ${BUILD_NUMBER}

这一步的实现原理其实很清晰,用到的SVN命令为svn diff 和 svn log。

  1. 使用 svn diff抓取指定范围内的变更记录,以提取对应的编译结果。
  2. 使用 svn log抓取其他一些日志信息,用以填充增量包的meta-info.md文件。

具体的代码实现这里就不贴了,价值不高。这里给出笔者参考的两个链接:

  1. 实现Jenkins+svn+bat批处理构建svn版本差异增量的自动化打zip包
  2. jenkins高级篇 pipeline 系列之-—06 实现自动打增量包

这里的关键点是约定好增量包的名称,这一点非常重要。直接关系到之后的通知功能实现的难易。

2.2 借助Nexus Webhook实现即时通知

现在一款软件如果想要做成平台,那Webhook基本属于标配了。不出意外地,我们的Nexus也对Webhook提供了完善的支持。

jenkins 为啥打包那么慢 jenkins增量打包_DevOps_02

本解决方案中,我们将借助Nexus提供的Webhook功能来实现即时通知的需求:通过配置Nexus Webhook,我们将在回调方法中解析当前增量包的名称,然后通过调用通知中心的API,向特定的地方运维人员发送更新通知。

参考链接:

  1. Webhook - Office Site
2.3 Portal

这一点其实算不上什么难点,本解决方案中Portal的存在只是为了避免地方人员直接接触Nexus,并借助Portal这个中间层进行权限验证,操作留痕等功能。

至于与Nexus的交互,这一点上Nexus的Rest Api已经足够完善了,笔者这里就不费口舌了。

参考:

  1. Nexus3 - REST and Integration API

3. 优化

未来我们可以开发针对性的增量包部署平台,用以实现增量包的自动化部署。实现最终的全流程无人工介入。

4. 最后

一直以来,版本的更新迭代都是我们的心头之患,与过往将希望寄托在地方运维人员的素养和能力上,本解决方案最大限度地消除了更新流程中的人工操作,势必带来更高的效率和系统稳定性。