Пролет с Дженкинсом - невозможно определить местоположение - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь интегрировать миграцию БД с Flyway в конвейере ci / cd, выполнив команду оболочки на одном из этапов. (поскольку мне не разрешено добавлять какие-либо новые плагины в конвейер, поэтому я не могу использовать плагин 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.

Учитывая следующую структуру проекта:

project structure

Есть идеи, что здесь может пойти не так?

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Спотыкаясь на этой проблеме Я понял, что столкнулся с подобной проблемой.

Мне удалось решить эту проблему, создав отдельную папку в корневом проекте с именем flyway, котораясодержит папку sql со всеми миграциями и следующие Dockerfile:

FROM boxfuse/flyway:5.2.4

COPY ./sql ./sql

Возвращаясь к файлу jenkins Я добавил новый шаг для создания образа докера:

  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
          """
      }
    }

Теперь работает как шарм.

0 голосов
/ 23 января 2019

Настройки тома докера монтируют каталог /GetShorty/Apis/Sql на хосте в каталог /flyway/sql внутри контейнера:

-v /GetShorty/Apis/Sql:/flyway/sql

Flyway работает внутри контейнера, поэтому флаг местоположений должен бытькаталог внутри:

-locations=/flyway/sql
...