Setting up Jenkins with RVM - ruby

I am looking for advice on how to correctly setup Ruby/RVM for use with Jenkins. When running Jenkins builds it runs them as Jenkins and I would like to be able to run builds with things like
gem install gemName
Without getting a you do not have permission to write to /Library/Ruby/Gems for example.
Currently this folder is owned by root wheel which explains why Jenkins does not have permission.
What is the best way to set this up? Do I just change the permission on the folder?
I also find myself running builds with
withEnv(['PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:$PATH']) {
sh '''npm install
grunt build
gem install gemName
'''
}
Which feels like a bit of a workaround to not setting up my environment correctly ?

One thing I noticed is your not telling Jenkins what rvm gemset you want to use. You also need to set the she-bang.
withEnv(['PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:$PATH') {
sh '''#!/bin/bash -l
rvm use 2.3.3#gemset --create
npm install
grunt build
gem install bundler
bundle install
```
}

Related

Error when using overcommit and Github Desktop

I am using overcommit gem (https://github.com/brigade/overcommit) in my project, when I use Github Desktop for osx I get these errors:
This repository contains hooks installed by Overcommit, but the
overcommit gem is not installed. Install it with gem install
overcommit. (1)
The gem is installed, it works in terminal. I guess it's because I use rvm and Github Desktop doesn't know about rvm. Anybody knows how to fix this?
Ok finally got it to work!
Combined the answer from #michelegera with comment from #rewritten
Step 1:
sudo su -
gem install bundler
gem install overcommit
gem install rubocop
Step 2: added command: ['bundle', 'exec', 'rubocop'] to .overcommit.yml
Thanks for the help!
Most likely it's this line where the error occurs. As you can see the main issue is that it's not able to require 'overcommit'. I don't know the GitHub desktop client so well (maybe there is a way to configure it inside of it), but one thing you could do is adding the absolute path where rvm stores your gems to the "require path" in the hook file. This could look like:
$: << "/home/user/.rvm/path/to/gems/dir"
The disadvantage of this is that you would have your absolute path in the hook file and it most likely won't work for others. You might also want to consider installing the gem globally for the the ruby interpreter that executes the script (see Shebang line in the hook file).
You are right, Github Desktop (or any other GUI) isn’t running in your terminal environment, so it knows nothing about your specific RVM installation.
A simple solution is to install overcommit and any other gems required by your hooks into your system Ruby:
sudo su -
gem install bundler
gem install overcommit
gem install rubocop
...
If you installed Git via Homebrew or other means, you might have to change the Git binary used by your GUI.
For example, in Tower, I selected Homebrew’s version rather than the System’s.

Does Gitlab omnibus package install ruby & git?

I'm trying to install Gitlab with omnibus package for Debian 7. Gitlab is running but it's very slow. Tail logs showed me, that unicorn process timeouts because get requests for assets timing out.
I read somewhere that I have to perform bundle exec rake assets:precompile RAILS_ENV=production but bundle command not found. Also, git command not found. Does omnibus package install ruby and git or I should do it manually? I couldn't find ruby or git in usr/bin or somewhere else.
The syntax bundle exec rake some_task is available for the normal GitLab installation, where you install all components manually.
With GitLab omnibus you can use gitlab-rake some_task. It will automatically use the GitLab's internal ruby installation, internal bundle etc.

Command Not Found Jekyll

I'm trying to create and publish a Jekyll blog using this template.
I installed Jekyll initially. Without any luck, I did resort to installing it via sudo. (And have now since uninstalled it!)
Jekyll(1.4.2, 1.0.3) and am running rvm with ruby 2.0.0p195. After installing the gem, I run jekyll serve in the folder but get the error: Zsh Command Not Found. I tried changing my path to no avail. Any advice on how to troubleshoot?
I cannot uninstall/reinstall nokogiri (see other SO articles on this) because of dependencies related to work projects.
If you're using rvm you should not install gems with sudo. Rvm is user-specific (the binaries are all in your home directory), so putting Ruby stuff in system-wide folders with sudo will not work. Just install without sudo and you should be ok.
The rvm docs tries to explain this a little bit here:
http://rvm.io/rubies/rubygems
DO NOT use sudo...
...to work with RVM gems. When you do sudo you are running commands as root, another user in another shell and hence all of the setup that RVM has done for you is ignored while the command runs under sudo (such things as GEM_HOME, etc...). So to reiterate, as soon as you 'sudo' you are running as the root system user which will clear out your environment as well as any files it creates are not able to be modified by your user and will result in strange things happening. (You will start to think that someone has a voodoo doll of your application...)

rake install does not work for octopress

I am trying to setup rake via this doc.
http://octopress.org/docs/setup/
But I get some errors.
ikhthiandor#ikhthiandor-Satellite-L450:/opt/octopress$ rake install
## Copying classic theme into ./source and ./sass
mkdir -p source
rake aborted!
Permission denied - source
Tasks: TOP => install
(See full trace by running task with --trace)
With sudo I get this output.
ikhthiandor#ikhthiandor-Satellite-L450:/opt/octopress$ sudo rake install
rake aborted!
no such file to load -- bundler/setup
(See full trace by running task with --trace)
Here is a list of files in the directory.
ikhthiandor#ikhthiandor-Satellite-L450:/opt/octopress$ ls -a
. config.ru .git Rakefile .slugignore
.. _config.yml .gitignore .rbenv-version .themes
CHANGELOG.markdown Gemfile plugins README.markdown
config.rb Gemfile.lock .powrc .rvmrc
How can I solve the problem?
Ikhthiandor: Looks like you are a beginner in the ruby/rails world.
By running the rake install command, you are installing the default octopress theme using the rake tool. Not trying to setup rake as you mention in the question.
The first error ( Permission denied - source when trying mkdir -p source - as you correctly guessed - is because the user doesn't have permissions to create that directory.
The second error ( no such file to load -- bundler/setup ) is because the previous install dependencies steps are not performed correctly (for the user running this command).
The install dependencies steps to be completed successfully are:
1. gem install bundler
2. rbenv rehash # If you use rbenv, rehash to be able to run the bundle command
3. bundle install
I am guessing you ran these steps successfully as 'ikhthiandor' user, so the bundler gem is not available for the 'sudo' user.
You can fix this by either of the following options:
changing permissions on /opt/octopress folder so that 'ikhthiandor' user has rights to create sub-folders/files within.
Run all the commands in the Octopress Setup doc as 'sudo'
Best practice would be to use either rvm or rbenv to manage custom installations of ruby environments per user (and not do everything as super user).
If you are indeed a fresher in the ruby-rails world, and want to step up your knowledge of the tools and the best practices in the ruby/rails world, I suggest browsing through the first few chapters of the Ruby on Rails Tutorial book that is available for free on-line.
HTH

rvm and sudo in bash script and rake script

I need to write some bash scripts and rake scripts to setup my server. However, I'm afraid that it will mess up with sudo in rvm because packages installation in ubuntu require sudo and gem installation doesn't need sudo.
Anyone has some suggestions?
Write two scripts, one for tasks that require sudo, and one for tasks not needing it. Your sudo tasks will have to run first because they're going to do your apt installs. Afterwards run your non-sudo script.
You definitely don't want to run RVM, or gems using sudo if it will be affecting something in rvm's sandbox.
I've set up several hosts lately, and that's the order I do my installs.

Resources