Flyway with Jenkins - 无法解析位置
Posted
技术标签:
【中文标题】Flyway with Jenkins - 无法解析位置【英文标题】:Flyway with Jenkins - Unable to resolve location 【发布时间】:2019-06-16 23:10:10 【问题描述】:我正在尝试通过在其中一个阶段运行 shell 命令将 db 迁移与 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.
考虑如下投影结构:
知道这里可能出了什么问题吗?
【问题讨论】:
【参考方案1】:docker 卷设置正在将主机上的/GetShorty/Apis/Sql
目录挂载到容器内的/flyway/sql
目录:
-v /GetShorty/Apis/Sql:/flyway/sql
Flyway 在容器内运行,因此位置标志需要是里面的目录:
-locations=/flyway/sql
【讨论】:
我一整天都意识到了这个问题,并且已经做出了改变。奇怪的是,如果我在本地运行 docker 命令,它会应用迁移,但如果它是通过 jenkins 运行的,则不会【参考方案2】:偶然发现这个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
"""
现在就像一个魅力。
【讨论】:
以上是关于Flyway with Jenkins - 无法解析位置的主要内容,如果未能解决你的问题,请参考以下文章
使用 Docker 和 Jenkins 自动化 Flyway 迁移
ORA-01017: Flyway 在 Jenkins 上抛出的用户名/密码无效
Heroku Postgres 升级后 Flyway 无法连接到数据库
flyway with spring boot and gradle--org.flywaydb.core.Flyway: 方法 <init>()V not found