Файл Дженкинса — Ошибка при запуске RSpec ВНУТРИ контейнера

#jenkins #bootstrap-4 #jenkins-pipeline #rspec-rails

#дженкинс #начальная загрузка-4 #дженкинс-трубопровод #rspec-рельсы

Вопрос:

Я пытаюсь создать файл Дженкинса, который:

  1. Создает образ проекта RoR из файла Dockerfile
  2. Проверяет, есть ли база данных, и если ее нет, она создает ее и переносит
  3. Выполняет некоторые тесты RSpec и удаляет контейнеры
  4. Окончательно удаляет рабочее пространство

Это мой файл Дженкинса:

 pipeline {  agent { label 'linux_slave' }   stages {  stage('Build') {  steps {  sh 'docker-compose build'  }  }  stage('DB') {  steps {  script {  DB_EXISTS = sh (  script: 'psql postgres -tAc "SELECT 1 FROM pg_database WHERE datname='Jenkins_project_test'"',  returnStdout: true  ).trim()  echo "Equal 1 if DB exists: ${DB_EXISTS}"  if(DB_EXISTS == "1") {  echo 'Database already exists'  } else {  sh 'docker-compose run web rake db:create'  sh 'docker-compose run web rake db:migrate'  }  }  }  }  stage('Test') {  steps {  sh 'docker-compose run --rm -e "RAILS_ENV=test" web bundle exec rspec'  sh 'docker-compose down'  }  }  }   post {  always {  junit(  allowEmptyResults: true,  testResults: '**/test-reports/*.xml'  )  cleanWs()   }  } }  

У меня возникли проблемы на шаге 3. Я получаю следующую ошибку:

   docker-compose run --rm -e RAILS_ENV=test web bundle exec rspec Creating test_rails_app_web_run ...  Creating test_rails_app_web_run ... done Users  GET /new  responds successfully (FAILED - 1)  Failures:   1) Users GET /new responds successfully  Failure/Error: @import "bootstrap/scss/bootstrap";   ActionView::Template::Error:  Error: File to import not found or unreadable: bootstrap/scss/bootstrap.  on line 7:1 of app/assets/stylesheets/application.scss  gt;gt; @import "bootstrap/scss/bootstrap";   ^  # ./app/assets/stylesheets/application.scss:7  

Но если я попытаюсь запустить его локально, выполнив те же действия, проблем не возникнет:

 ➜ Jenkins_project git:(master) docker-compose run --rm -e RAILS_ENV=test web bundle exec rspec Creating network "jenkins_project_default" with the default driver Creating jenkins_project_db_1 ... done Creating jenkins_project_web_run ... done  Users  GET /new  responds successfully  Finished in 11.88 seconds (files took 23.43 seconds to load) 1 example, 0 failures  

My directory layout is:

 app ├── assets │ ├── config │ ├── images │ └── stylesheets  ├── components  │ ├── _alert.scss  │ ├── _avatar.scss  │ ├── _index.scss  │ └── _navbar.scss  ├── config  │ ├── _bootstrap_variables.scss  │ ├── _colors.scss  │ └── _fonts.scss   ├── pages  │ ├── _home.scss  │ └── _index.scss   └── application.scss  

И application.scss это выглядит следующим образом:

 // Graphical variables @import "config/fonts"; @import "config/colors"; @import "config/bootstrap_variables";  // External libraries @import "bootstrap/scss/bootstrap"; @import "font-awesome-sprockets"; @import "font-awesome";  // Your CSS partials @import "components/index"; @import "pages/index";  

Это два моих вопроса, касающихся проблемы:

  1. Есть какие-нибудь идеи о том, почему это происходит на Дженкинсе, а не локально?
  2. Лучше ли запускать rspec внутри контейнера или снаружи контейнера (перед созданием изображения)

Спасибо!!

Ответ №1:

Достаточно просто, я побежал yarn перед rspec. Это позаботится об установке зависимостей начальной загрузки и другой ошибке, связанной с тем, что webpack не компилируется:

 sh 'docker-compose run -e "RAILS_ENV=test" web rake db:create db:migrate' sh 'docker-compose run -e "RAILS_ENV=test" web yarn install --ignore-engines' sh 'docker-compose run -e "RAILS_ENV=test" web bundle exec rspec'