Как дождаться завершения миграции баз данных MySQL в Docker-контейнере, прежде чем перейти к следующему этапу в Jenkins - PullRequest
0 голосов
/ 24 мая 2019

В моем Jenkinsfile у меня есть несколько этапов для моего конвейера.На одном из этапов я использую Docker для раскрутки базы данных MySQL, а затем запускаю некоторые миграции баз данных для настройки таблиц базы данных и некоторых данных сеялки.На следующем этапе Дженкинса я делаю некоторые модульные тесты, которые требуют связи с базой данных, и все модульные тесты выполняются вне Docker.Проблема в том, что этап Jenkins начинается до завершения миграции на предыдущем этапе, поэтому модульные тесты не пройдут, потому что таблицы базы данных не готовы.

Я пытался подождать, пока выполнение кода будет ждатьопределенное количество времени до завершения миграции.Но период ожидания жестко закодирован, что, я думаю, не является гибким, и это приведет к сбою конвейера, если миграция займет больше времени ожидания.

Пожалуйста, найдите мой текущий код ниже:

stage('Bring up MySQL Docker') {
   steps {
      sh 'pwd'
      sh 'sudo npm run playpen-stop'
      // this starts a docker container to spin up a MySQL database and run migraions
      sh 'sudo npm run playpen-start'
   }
}

stage('Unit testing backend/products') {
   when {
      expression { GIT_CHANGES.contains('backend/products') == true }
   }
   steps {
      dir ('backend/products') {
         sh 'pwd'
         //todo: this is a hack to wait until migrations are complete
         sh 'sleep 40'
         //todo: hack to fix permissioning issues
         sh 'sudo rm -rf node_modules/'
         sh 'sudo DOTENV=.env.playpen npm run test'
       }
     }
  }

1 Ответ

0 голосов
/ 24 мая 2019

Обходной путь может быть примерно таким из документации jenkins :

 sh 'while ! mysqladmin ping -hdb --silent; do sleep 1; done'

Это должно быть легко адаптируемо. Но все еще не хорошее решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...