【发布时间】:2022-01-10 12:57:36
【问题描述】:
我正在尝试创建一个 Jenkinsfile:
- 从 Dockerfile 构建 RoR 项目的映像
- 检查是否有数据库,如果没有则创建并迁移
- 做一些 RSpec 测试并移除容器
- 终于删除了工作区
这是我的 Jenkins 文件:
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 更好(在构建映像之前)
谢谢!!
【问题讨论】:
标签: jenkins bootstrap-4 jenkins-pipeline rspec-rails