Автоматизируйте миграцию Flyway с помощью Docker и Jenkins - PullRequest
0 голосов
/ 13 февраля 2019

Я бы хотел автоматизировать миграцию Flyway для нашей базы данных MariaDB.В целях тестирования я добавил следующий сервис к своему 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 с указанным выше docker-compose.yml в моем Jenkinsfile, произойдет ли соответствующая стадия из-за ошибок во время миграции?Кстати, заметит ли Дженкинс эту ошибку?
  2. Если это не так, как я могу интегрировать миграцию Flyway в мой конвейер Дженкинса?Я обнаружил, что есть плагин Flyway Runner, но я не видел, может ли он подключаться к базе данных в стеке Docker, развернутом Jenkinsfile

1 Ответ

0 голосов
/ 13 февраля 2019

Вы можете использовать Встроенную поддержку Jenkins для 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 будет выполняться во временном контейнере Docker, созданном Jenkins agent из boxfuse/flyway изображение.Если команда терпит неудачу, весь этап также завершится неудачей.

...