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
"""
}
}
现在效果很好。
我正在尝试通过 运行 在其中一个阶段中的 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
"""
}
}
现在效果很好。