使用 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 agentboxfuse/flyway 映像创建的临时Docker 容器中执行。如果命令失败,整个阶段也会失败。

【讨论】:

以上是关于使用 Docker 和 Jenkins 自动化 Flyway 迁移的主要内容,如果未能解决你的问题,请参考以下文章

jenkins容器中使用docker

Jenkins docker插件自动创建容器执行完成销毁容器

Selenium Grid Docker-通过 Jenkins 实现自动化

Docker+jenkins+Gitee+Maven构建自动化部署

Docker+jenkins+Gitee+Maven构建自动化部署

使用阿里云容器服务Jenkins实现持续集成和Docker镜像构建