使用Docker和Jenkins自动进行Flyway迁移

时间:2019-02-13 10:43:18

标签: docker jenkins docker-compose flyway

我想为我们的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构建管道中。这就是我卡住的地方。

  1. 如果我在docker-compose.yml中部署了上面的Jenkinsfile的Docker堆栈,相应的阶段是否会在迁移过程中因错误而失败?说来,詹金斯会注意到那个错误吗?
  2. 如果不是这样,如何将Flyway迁移集成到我的Jenkins管道中?我发现有一个Flyway Runner插件,但没有看到它是否可以连接到Jenkinsfile
  3. 部署的Docker堆栈中的数据库

1 个答案:

答案 0 :(得分:2)

您可以使用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容器中执行。如果命令失败,整个阶段也会失败。