\

看新闻很累?看技术新闻更累?试试下载InfoQ手机客户端,每天上下班路上听新闻,有趣还有料!

\

\\

数据库发布自动化提供商Datical发布了新版本Datical 5。该版本实现了一种集中命令中心,提升了数据库版本的可见性,支持开发人员在无需手动应用代码更改的情况下,管理并重做(rework)数据库代码更改。此外,该版本还增强了数据库凭证和可审计性的安全。

\\

Datical 5提供了一组仪表板和管理界面,可供开发人员和数据专家访问。仪表盘上展示了数据库版本的状态和进展速度,管理界面则用于跟踪数据库在整个发布流水线中的更改情况。它还支持在强制执行审计和合规性规的同时,对部署变更到环境之前模拟变更所产生的影响。

\\

新版本解决了在数据库迭代开发中存在的一些挑战,允许开发人员检入需重做的数据库代码更改。当前,重做数据库更改是一项具有挑战性的工作。因为一旦应用发生更改,数据将即刻被添加、修改、重新组织或删除。要重做更改,数据库管理员必须手动地撤消以前的更改。这增舔了一部分额外的工作,并对应用的发布过程给出了一些潜在的限制。

\\

Datical 5可自动回退不必要的数据库更改,并应用更新后的更改。由于缺乏统一的标准和控制,管理数据库环境凭证和访问很有可能是一个高风险的流程。新的集中式凭证存储,提供了一种管理整个企业数据库凭证的标准方法。它还可处理利益相关者的访问控制,提供对集中管理界面的适当访问,从而提高数据的安全性。这有助于组织用户,并强制执行部署状态查看或数据库更改的相关权限。

\\

正如Eduardo Piairo撰写的“将数据库更改添加到部署流水线中的原因及做法”一文中所说的:

\\

\

数据库和应用应并存于同一部署流水线中。换句话说,二者应分享同样的开发生命周期。但应区别对待数据库开发和应用开发。

\

\\

Piairo建议,数据库部署应使用一种代码驱动的方法:

\\

\

如果使用脚本实现所有的数据库更改,那么就可以对数据库更改应用源代码控制,并且可将持续集成和持续交付活动包括到数据库开发中。也就是说,数据库更改可以参与到部署流水线中。

\

\\

Piairo还列出了在自动化数据库部署中应采取的步骤:

\\

\

第一步是使用脚本实现数据库更改。在一般情况下,该步骤是手工完成的。下一步是构件(artefact)的构建和验证,构件中包括了数据库更改。这一步应实现完全的自动化。换句话说,我们需要使用脚本实现构建软件包、运行单元测试和集成测试、将软件包发送给构件管理系统和(或)发送给部署服务器或服务。正常情况下,构建服务器缺省包括了上述步骤。最后一步是在目标服务器或数据库中实现数据库更改的自动化部署。和前面的步骤一样,你可以使用部署服务器的内置选项,也可以构建自己定制的脚本。

\

\\

Datical的高级产品市场经理Sanjay Challa在他的博客帖子“使用Jenkins推送数据库更改存在什么问题?”中指出:

\\

\

数据库更改当然可以提交给源代码控制。这些脚本可从源代码控制中检出,并使用持续集成工具打包到构件中。所生成的构件可以推送到构件仓储中,并在仓储中使用发布自动化工具,随发布流水线部署到环境,直至生产环境。

\

\\

But Challa进而建议,应慎重使用该方法:

\\

\

有必要提醒大家,数据库是具有状态的。因此,必须要慎重管理数据库更改,因为我们并不想破坏数据库的状态。尽管可以使用更改的版本覆盖应用的旧版本而实现替换,但是这种简单的做法并不适用于数据库。一个不良的数据库版本,可能会对企业造成不可恢复的数据损失,也可能导致应用大量停止服务。和大多数应用可执行文件一样,根本不可能“吹干净”旧版本的数据库。然后用更新后的版本覆盖它。

\\

根本上讲,如果仅依靠构建、配置和发布自动化工具来管理数据库部署,那么会使数据处于风险之中。考虑到不良更改的后果,数据库更改通常单独使用手动过程处理。组织的运行将会继续维持手工数据库更改过程所固有的一些特点,例如应用发布速度较低,代码质量较低等。最后一点,如果单纯依靠构建和发布自动化工具,应用和数据库更改将永远不会以相同的速度通过发布流水线。

\

\\

Challa解释说,为使数据库更改通过应用代码所历经的同一个统一的发布流水线,需要一系列特性的支持。通常需要重做数据库更改,并且由于需要保持数据库的状态,因此相比起重做任何其他类型的代码,重做数据库更改需要做更多的工作。通常,DBA必须手动完成数据库环境的恢复,这样开发人员才能重做更改。如果没有手动撤消需重做的更改,那么会在较低层级的环境中将会执行有差异的前滚,进而有差异的更改将会应用于未受初始更改影响的较高层级环境。这破坏了DevOps“一次构建,多次部署”的理念,因为较高层级的部署与较低层级的部署间存在不一致。

\\

当开发人员可以像处理应用代码一样处理数据库代码,并将更新后的数据库版本更改检入源代码控制时,这时可以使用一种工具去智能地清理较低层级的环境,在其中生成旧版本更改,并应用更新后的版本(并将更新后的更改正确地应用于从未受到旧版本更改影响的更高层级环境)。这将降低了数据库状态受损的风险,去除了手动作业,使得一致性构件可通过流水线得以部署。

\\

Challa接着解释说,数据库代码验证通常是一个完全手动的过程,它不会通过我们在持续集成或交付流水线中所期望的自动化测试。Datical提供的Dynamic Rules Engine解决了这个限制,它允许组织编撰标准和最佳实践,对数据库代码做自动验证。它使用的是基于对象的规则引擎,而不是简单的正则表达式引擎,因此可以实现功能性规则(例如,限制每个表的索引总数)。这去除了手动作业,并可对提交源代码控制的数据库更改做出快速反馈。Datical的Change Management Simulator通过构建目标数据库的内存模型,将建议更改应用于模型中,进而验证模型的最终状态是否符合预期。

\\

Datical 5当前发布的是Beta版,GA版计划于2018年第二季度发布。

\\

查看英文原文: Datical Adds Continuous Delivery Capabilities for the Database

Datical为数据库添加持续交付能力相关推荐

  1. 研发协同平台持续交付2.0架构演进

    源宝导读:为了打通CI/CD环节,实现持续的端到端的交付能力,RDC平台提供了在线化的更新服务,随着业务量增长与场景的需要,我们对更新服务架构重新设计,实现了2.0版本.本文将介绍更新服务2.0的架构 ...

  2. 研发协同平台持续交付之代理服务实践

    源宝导读:插件系统大大提高了系统的扩展性,有利于模块化开发.系统发布后,当我们需要对系统进行扩充,可以再不编译的情况下更新系统的插件即可.基于热拔插的软件系统提高了持续交付能力,在添加新特性的同时保持 ...

  3. 持续交付的软件系统架构

    为了提升交付速度,获得持续交付能力,系统架构在设计时应该考虑如下因素: 为测试而设计:如果我们每次写好代码以后,需要花费很大的精力,做很多的准备工作才能对它进行测试的话,那么从写好代码到完成质量验证就 ...

  4. 云效携手SAE助力「石家庄掌讯 」持续交付、降本提效

    掌讯信息技术有限公司创立于2009年,是一家提供企业信息化咨询.创新型软件产品.电商代运营服务,标准化管理.快速发展的高新技术企业.当前公司正处于企业互联网市场突破转型重要阶段,希望将更多精力转移到业 ...

  5. 做到这4点,才是真正的持续交付 | 研发效能提升36计

    编者按:全线专栏<研发效能提升36计_持续交付篇>上线啦!本专栏将通过10-20篇文章,系统分享云原生时代,企业如何落地持续交付.本文是该专栏的第2篇. 什么是真正的持续交付? 首先,我们 ...

  6. 2017敏捷沙滩大会:完美软件,测量持续交付,以及探索未来

    在英国康沃尔郡举行的2017敏捷沙滩大会上,数百名演讲者和参与者共聚一堂,探讨敏捷和后敏捷领域软件开发方法有哪些最新进展.本次大会最后一个下午的要点包括:交付团队可以通过拥抱精益.迭代和持续的部署方法 ...

  7. starops 云效运维 文档_阿里云 SAE 携手云效助力「石家庄掌讯」持续交付、降本提效...

    背景 石家庄掌讯信息技术有限公司创立于2009年,是一家提供企业信息化咨询.创新型软件产品.电商代运营服务,标准化管理.快速发展的高新技术企业.当前公司正处于企业互联网市场突破转型重要阶段,希望将更多 ...

  8. EASYOPS系列|谨慎!勿让持续交付变成bug自动化发布

    你的持续交付能力用得还好吗,比如频繁发布移动或云应用的特性增强?还是恰好相反,快速发布了带漏洞的版本? - Joel Shore 持续交付能让交付流程跑得更快,但持续交付本身并不能为发布质量打包票.国 ...

  9. 持续交付中有哪些宝贵数据?

    通过我前面和你分享的内容,相信你已经掌握了持续交付流水线所包含的五个主要动作:代码管理.环境管理.集成和编译管理.发布管理,以及测试管理.而且,你也应该已经初步掌握了建设持续交付体系的基本方法. 那么 ...

最新文章

  1. python中利用lxml模块解析xml文件报错XMLSyntaxError: Opening and ending tag mismatch
  2. OpenCV 相机校正
  3. react native 网络请求 axios
  4. 试题导入mysql乱码_解决Mysql导入乱码问题
  5. 原代脂肪细胞提取的准备内容
  6. java Date获取 年月日时分秒
  7. 好看的B2憨宝子主题模板–wordpress主题模板
  8. ipython和anaconda区别_anaconda和python区别
  9. matlab2c使用c++实现matlab函数系列教程-save函数
  10. 【Python实例第32讲】一个分类分数的置换检验
  11. 雷军:程序员如何成功创业?
  12. PHP7通过yum源安装及性能测试
  13. 华为OJ-奥运会排行榜C++
  14. 初学Linux的简单命令(一)
  15. python爬虫微博图片_python爬取微博图片及内容
  16. Arduino开发教程汇总
  17. 管理学书籍推荐:这10本优秀的管理类书籍最值得一读
  18. 掌握真正科学的学习方法——学会如何学习(Learning How to Learn)课程笔记
  19. 为什么说学计算机更有远见,“孩子,我为什么逼你读书”:有远见的父母,都有点心狠...
  20. LCA——JD 3055 Nearest Common Ancestors

热门文章

  1. 动画库 Lottie 的使用
  2. Android开源控件ViewPager Indicator的使用方法
  3. Android性能优化之运算篇(二)
  4. windows 下配置 react native 开发环境
  5. SwiftUI 发展现状和学习指南
  6. (0086)iOS开发之iPhone 屏幕尺寸、分辨率、ppi以及@2x@3x图
  7. uniapp在安卓和IOS端 APP固定竖屏及获取设备信息
  8. [No000018C]Vim清除上次的搜索高亮结果-Vim使用技巧(1)
  9. Swift - 使用网格(UICollectionView)的自定义布局实现复杂页面
  10. Javascript作用域原理---预编译