工程化实践:SQL版本化后的持续集成测试

导读:本篇文章讲解 工程化实践:SQL版本化后的持续集成测试,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

c4ff138d4f95c7b8dfbe8ea78871b065.png

注:文尾有代码样例链接

背景

长时间以来,我们团队基于Flyway的约定方式来管理SQL,即通过文件名的前缀来区分当前的DB中的schema的版本。如下图:

b02f8130eb525ab24ad490113715589c.png

这些文件被存储在Git仓库中。任何希望对schema进行修改的人,都可以提MR。

但是,时间长了,reviewer无法通过大脑来判断MR中的SQL能否在实际的环境成功执行。所以,我决定实现SQL的持续集成测试。

工具列表

构建工具:Bazel。

数据库的启动与初始化实现:testcontainers

虽然基于maven就可以实现本文所说的功能,但是由于我正在学习Bazel,所以,决定使用Bazel实现。

具体步骤

步骤1:准备存放SQL的git仓库

当前的目录结构:

50812b81fef2473e1cefee2be0d922f7.png

  • sqls目录:存放SQL;

  • MainTest.java:通过testContainers启动一个PostgreSQL数据库,并执行flyway;

  • BUILD.bazel:构建逻辑;

  • WORKSPACE:Bazel的工作空间定义。

MainTest代码如下:

@ClassRule
    public static PostgreSQLContainer postgreSQLContainer
= new PostgreSQLContainer("postgres:12.8")
            .withDatabaseName("integration-tests-db")
            .withUsername("sa")
            .withPassword("sa");
    @Test
    public void testMain() {
        Flyway flyway = Flyway.configure()
                .locations("sqls")
                .dataSource(postgreSQLContainer.getJdbcUrl(),
                postgreSQLContainer.getUsername(), 
                postgreSQLContainer.getPassword()).load();
        MigrateResult migrate = flyway.migrate();
        Assert.assertEquals(2, migrate.migrationsExecuted);
        Assert.assertTrue(migrate.success);
    }

步骤2:集成到CI平台

我们以Github Actions为例:

name: CI with Bazel
on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]
jobs:
  test_sql:
    runs-on: ubuntu-18.04
    steps:
    - uses: actions/checkout@v2
    - name: Mount bazel cache
      uses: actions/cache@v1
      with:
        path: "/home/runner/.cache/bazel"
        key: bazel
    - name: Setup bazel
      uses: jwlawson/actions-setup-bazel@v1
      with:
        bazel-version: '4.0.0'
    - name: test all
      run: bazel test  //...

部分执行日志:

b9cdfabfbef8661c67fba1f8b63d0b0d.png

本方案的不足

目录结构中太多无用的内容。因为我们要测试的是SQL的正确性,代码仓库中还会出现java代码文件?解决方案实现一个flyway的Bazel rule。

代码样例:https://github.com/zacker330/bazel-flyway-demo

推荐阅读:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/70961.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!