В моем 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'
}
}
}