Flyway 持续数据库集成

Posted 薛定谔的DBA

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flyway 持续数据库集成相关的知识,希望对你有一定的参考价值。

数据难以管理,数据库难以测试。数据库部署比应用程序部署复杂得多,因为您不能每次都从头开始重新部署代码。数据库自动化很困难,而且通常是担心弄乱关键数据,这可能会暂停后续开发并减慢业务交付。

现在,我们推荐一款开源数据库发布工具 —— Flyway 。

 

什么持续集成?

持续集成是一种开发实践,它鼓励开发人员尽可能频繁地将代码的更改签入源存储库。由于代码频繁的被签入并集成为更小的部分,因此更容易在早期识别和解决问题。每次代码提交都会在单独的 CI 服务器中触发自动构建,并执行单元和集成测试。因为任何测试失败的构建都不允许签入源存储库,代码质量得到维护。

您需要记住的一件重要事情是,如果没有源代码控制,您就无法进行持续集成。

简而言之,要实现持续集成,需要执行以下 5 项活动:

  • 维护源代码控制

  • 较小的代码提交

  • 频繁的代码检查

  • 自动化构建

  • 自动化测试

为什么需要 Flyway 呢?

在为应用程序实现数据层时,您需要考虑 DDL 和 DML 脚本的迁移策略。处理关系数据库中的更改可能会更加复杂,因为您需要找到数据库的当前状态并跟踪针对不同环境执行的脚本。所有数据库脚本都需要签入源代码管理,这应该是我们代码唯一的真实来源。

使用 Flyway 的五个原因:

  • Flyway 是免费和开源的。

  • Flyway 轻巧且易于设置。

  • Flyway 提高了数据库变更的自动部署。

  • Flyway 使数据库当前状态清晰明了。

  • Flyway 允许你从头开始重新创建数据库——它跟踪针对特定数据库环境执行的 DDL/DML 脚本。

如何在你的项目中启用 Flyway?

在 build.gradle 文件中的依赖项下包含 flyway 依赖项

compile group: ‘org.flywaydb’, name: ‘flyway-core’, version: “$project.ext[‘flywayVersion’]”

在 application.yml 文件中包含 flyway 设置

flyway:
   enabled: true
   schemas: <db_schema_name>
   locations: classpath:/sql

该工具的工作方式是使用 SQL 脚本扫描适当的文件夹,并在项目启动期间对你的数据库执行SQL 脚本。

Flyway是如何运作的呢?

如果您想在另一个环境中启动一个新的数据库实例,Flyway 可以轻而易举地为您完成。在应用程序启动时,它会尝试与数据库建立连接。如果它不能,它会抛出一个错误。

它可以帮助您轻松地发展您的数据库架构,并且在所有情况下都是可靠的。无需手动执行数据库脚本。

每次需要升级数据库时,无论是架构(DDL)更改还是数据(DML)操作,你都可以简单地创建一个版本号高于当前版本号的新迁移脚本。当 Flyway 启动时,它会找到新的脚本并相应地执行脚本升级数据库。

Flyway在您的数据库中创建一个表名“ schema_version ”。该表负责跟踪数据库的状态,并为已执行的各种sql脚本保留显式记录。随着每次迁移的应用,架构历史记录表都会更新。

 

使用 Flyway 时要记住的事情

请勿修改已部署的 SQL 文件。如果您想部署现有脚本的微小变化,请确保创建一个新的 sql 文件。

SQL 文件的命名约定,记下双下划线 - 序列和描述之间的分隔符。

V<version_sequence>__description_of_the_script.sql

 

Flyway 支持哪些数据库?

支持的数据库有 Oracle、SQL Server(包括 Amazon RDS 和 Azure SQL 数据库、DB2、mysql(包括 Amazon RDS、Azure 数据库和 Google Cloud SQL)、MariaDB、PostgreSQL(包括 Amazon RDS、Azure 数据库、Google Cloud SQL 和 Heroku)、 Redshift、CockroachDB、SAP HANA、Sybase ASE、H2、HSQLDB、Derby 和 SQLite。

有关 Flyway 的更多详情,请参阅 https://flywaydb.org

以上是关于Flyway 持续数据库集成的主要内容,如果未能解决你的问题,请参考以下文章

Flyway 持续数据库集成

持续集成简介

大规模代码构建技术实践

敏捷持续集成(Jenkins)

Jenkins安装

持续集成-jenkins介绍与环境搭建