使用 Docker 和 Jenkins 自动化 Flyway 迁移
Posted
技术标签:
【中文标题】使用 Docker 和 Jenkins 自动化 Flyway 迁移【英文标题】:Automate Flyway migration with Docker and Jenkins 【发布时间】:2019-07-07 04:07:48 【问题描述】:我想为我们的 MariaDB 数据库自动执行 Flyway 迁移。出于测试目的,我将以下服务添加到我的 docker-compose.yml
仅运行 info
命令。
flyway:
image: boxfuse/flyway:5.2.4
command: -url=jdbc:mariadb://mariadb_service -schemas=$$mysql_DATABASE -table=schema_version -connectRetries=60 info
volumes:
- ./db/migration:/flyway/sql
depends_on:
- mariadb_service
这似乎有效,即我可以看到info
的输出。
现在我想将这个想法更进一步,并将其集成到我们的 Jenkins 构建管道中。这就是我卡住的地方。
-
如果我在我的
Jenkinsfile
中部署具有上述docker-compose.yml
的Docker 堆栈,在迁移过程中是否会因错误而导致相应阶段失败?说到这里,詹金斯会注意到这个错误吗?
如果不是这样,我如何将 Flyway 迁移集成到我的 Jenkins 管道中?我发现有一个 Flyway Runner 插件,但我没有看到它是否可以连接到由Jenkinsfile
部署的 Docker 堆栈中的数据库
【问题讨论】:
【参考方案1】:您可以使用Jenkins built-in support for Docker。那么你的管道脚本可能包含阶段
stage('Apply DB changes')
agent
docker
image 'boxfuse/flyway:5.2.4'
args '-v ./db/migration:/flyway/sql --entrypoint=\'\''
steps
sh "/flyway/flyway -url=jdbc:mariadb://mariadb_service -schemas=$MYSQL_DATABASE -table=schema_version -connectRetries=60 info"
这样steps
将在Jenkins agent
从boxfuse/flyway
映像创建的临时Docker 容器中执行。如果命令失败,整个阶段也会失败。
【讨论】:
以上是关于使用 Docker 和 Jenkins 自动化 Flyway 迁移的主要内容,如果未能解决你的问题,请参考以下文章
Jenkins docker插件自动创建容器执行完成销毁容器
Selenium Grid Docker-通过 Jenkins 实现自动化
Docker+jenkins+Gitee+Maven构建自动化部署