Flyway with Jenkins - 无法解析位置

Flyway with Jenkins - Unable to resolve location

我正在尝试通过 运行 在其中一个阶段中的 shell 命令在 ci/cd 管道中将数据库迁移与 Flyway 集成。 (因为我不允许在管道中添加任何新插件,所以不能使用 Flyway 插件)

我已经试过了:

    stage('migrate-sql') {
      steps {
        sh """
          docker run --rm \
          -v /GetShorty/Apis/Sql:/flyway/sql \
          boxfuse/flyway:5.2.4 \
          -url=jdbc:postgresql://****:5432/**** \
          -user=**** \
          -password=**** \
          -baselineOnMigrate=false \
          -locations=/GetShorty/Apis/Sql \
          -connectRetries=60 \
          migrate
        """
      }
    }

但是没有应用任何迁移,因为它似乎没有找到迁移文件夹

WARNING: Unable to resolve location /GetShorty/Apis/Sql

Successfully validated 0 migrations (execution time 00:00.378s)

Current version of schema "public": << Empty Schema >>

Schema "public" is up to date. No migration necessary.

考虑以下项目结构:

知道这里可能出了什么问题吗?

docker 卷设置正在将主机上的 /GetShorty/Apis/Sql 目录挂载到容器内的 /flyway/sql 目录:

-v /GetShorty/Apis/Sql:/flyway/sql

Flyway 在容器内 运行 因此位置标志需要是容器内的目录:

-locations=/flyway/sql

遇到这个问题 issue 我意识到我遇到了类似的问题。

我设法解决它的方法是在名为 flyway 的根项目中创建一个单独的文件夹,其中包含一个包含所有迁移的 sql 文件夹和以下 Dockerfile

FROM boxfuse/flyway:5.2.4

COPY ./sql ./sql

回到 jenkins 文件,我添加了一个新步骤来构建 docker 图像:

  DOCKER_IMAGE_FLYWAY = "flyway"

  stages {
    stage('build docker images') {
      steps {
        script {
          dockerImage_flyway = docker.build("$DOCKER_REGISTRY/${DOCKER_PROJECT}/${DOCKER_IMAGE_FLYWAY}:${env.BUILD_NUMBER}", "flyway")
        }
      }
    }

并修改了迁移阶段以使用该图像

stage('migrate-sql') {
      steps {
        sh """
            docker run --rm \
            "$DOCKER_REGISTRY/${DOCKER_PROJECT}/${DOCKER_IMAGE_FLYWAY}:${env.BUILD_NUMBER}" \
            -url=jdbc:postgresql://****:5432/**** \
            -user=**** \
            -password=**** \
            -baselineOnMigrate=false \
            -schemas=**** \
            -connectRetries=60 \
            migrate
          """
      }
    }

现在效果很好。