我正在嘗試創建一個 Jenkinsfile :
- 從 Dockerfile 構建 RoR 專案的映像
- 檢查是否有資料庫,如果沒有,則創建并遷移
- 是否進行一些 RSpec 測驗并移除容器
- 最后洗掉作業區
這是我的 Jenkinsfile:
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
>> @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
我的目錄布局是:
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";
這是我關于這個問題的兩個問題:
關于為什么這會發生在 Jenkins 而不是本地的任何想法?
在容器內部還是容器外部運行 rspec 更好(在構建映像之前)
謝謝!!
uj5u.com熱心網友回復:
很簡單,我跑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'
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/379612.html
標籤:詹金斯 bootstrap-4 詹金斯管道 rspec-rails
