I am running Jenkins on AWS EC2 Linux Instance and I am trying to bundle install the gems needed for my rails repo on GitHub.
It is a new project that I created for testing but the bundle takes hours, Jenkins freezes and I need to restart the server and Jenkins and it never finishes installing the gems in the end.
This is my code:
pipeline {
agent { docker { image 'ruby:2.6.6' } }
stages {
stage('Fetching Git') {
steps {
git credentialsId: 'user-key',
url: '[email protected]:user/jenkins_project.git'
}
}
stage('Build') {
steps {
sh 'gem install bundler'
sh 'bundle install --jobs 4'
sh 'RAILS_ENV=test rake db:migrate'
}
}
stage('Test') {
steps {
sh 'RAILS_ENV=test bundle exec rspec --format RspecJunitFormatter --out result_spec.xml'
}
}
}
}
What I tried doing is:
Using --jobs when bundle install (it doesn't seem to work)
Using http instead of https on the Gemfile when on
source 'http://rubygems.org'
I know it is unsafe. And this doesn't seem to work either. 3. Also tried this:
echo 'export MAKE="make -j$(nproc)"' >> $home/.bash_profile
time MAKE="make --jobs 8" bundle install
From here (https://build.betterup.com/one-weird-trick-that-will-speed-up-your-bundle-install/). But it doesn't work either.
Any ideas on why is this happening and how can I solve it greatly appreciated!
CodePudding user response:
Solved this by:
- Creating a master server with Java & Jenkins
- Creating a slave server (called 'linux_slave') with Java & Git & Docker
The code would be something like this:
pipeline {
agent {
docker {
image 'ruby:2.6.6'
label 'linux_slave'
}
}
stages {
stage('Fetching Git') {
steps {
git credentialsId: 'user-key',
url: '[email protected]:user/jenkins_project.git'
}
}
stage('Build') {
steps {
sh 'gem install bundler:2.0.1'
sh 'bundle install'
sh 'RAILS_ENV=test rake db:migrate'
}
}
}
}
Hope it helps someone in need sometime!
CodePudding user response:
add this as first line before gem install as each installed package will be less in size because no documenation is been downloaded with it
'echo''gem: --no-document'' > ~/.gemrc'
I have used this for Travis and it helped a lot I am not fully sure for Jenkins syntax but try the following one
stage('Build') {
steps {
sh 'echo''gem: --no-document'' > ~/.gemrc'
sh 'gem install bundler'
sh 'bundle install --jobs 4'
sh 'RAILS_ENV=test rake db:migrate'
}
}