使用 Jenkins 和 Gradle 运行 Flyway 迁移 - 无法解析位置类路径:db/migration

Posted

技术标签:

【中文标题】使用 Jenkins 和 Gradle 运行 Flyway 迁移 - 无法解析位置类路径:db/migration【英文标题】:Running Flyway migrations with Jenkins and Gradle - Unable to resolve location classpath:db/migration 【发布时间】:2018-03-18 16:52:12 【问题描述】:

通过 jenkins 运行 flyway 时,我在控制台输出中收到以下错误:

Unable to resolve location classpath:db/migration

我的项目源码结构如下:

Project1
|--WEB-INF
   |--src
      |--java source
   |--flywaysrc
      |-- flyway source

我的 build.gradle 对 flyway 和 java 有单独的 sourceSet:

sourceSets 
    main 
        java           
            srcDir 'WEB-INF/src'        
        
    
    flyway 
        java 
            srcDir 'WEB-INF/flywaysrc'
            output.classesDir='bin'         
        
    

它还包含一个flyway条目,其中locations数组设置如下:

flyway   
    ...other configuration params...  
    ArrayList<String> locationsArray = new ArrayList<String>();  
    locationsArray.add("classpath:db/migration");  
    locationsArray.add("filesystem:/path/to/eclipse/Project1/WEB-INF/Release/old_release");
    locationsArray.add("filesystem:/path/to/eclipse/Project1/WEB-INF/flywaysrc");  
    locations=locationsArray  
    ...other configuration params...  

知道是什么原因造成的/您需要什么信息来提供更多有助于解决此问题的输入?

【问题讨论】:

【参考方案1】:

默认情况下,flyway 在类路径的 db/migrations 文件夹中查找迁移。如果此 db/migrations 存在并且它包含迁移 sqls flyway 将选择它。也可以使用属性 [locations]:(https://flywaydb.org/documentation/commandline/info)

自定义迁移文件夹位置

您确定 flywaysrc 文件夹中有 db/migrations 并且 db/migrations 包含迁移 sql 吗?

【讨论】:

是的,我确定。 Flyway 是通过 gradle 运行的,我在上面的问题中添加了一个配置的 sn-p ......奇怪的是我可以从 eclipse 运行 flyway 并毫无问题地更新数据库。当我通过 Jenkins 运行 flyway 任务时,它失败并出现上述错误。

以上是关于使用 Jenkins 和 Gradle 运行 Flyway 迁移 - 无法解析位置类路径:db/migration的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins 使用 Gradle 守护进程构建失败

Jenkins使用Gradle守护程序构建失败

windows环境下jenkins+gradle+Android 自动打包部署

Jenkins 和 gradle - 使用最新版本的 CI 依赖项构建项目,用于生产的特定版本

使用与 Android Studio 在 Jenkins 中相同的 Gradle 版本

使用 Jenkins 构建 Gradle 项目时出错