Allowing Gitlab CI Runners to use RVM is really easy:
# Login as a super user (or use sudo)
su
# Switch to gitlab CI runner user
su - gitlab_ci_runner
# Go to his home directory
cd ~
# And install RVM
\curl -sSL https://get.rvm.io | bash -s stable --ruby
# Now go back to su
exit
# And restart (just in case) gitlab and ci
/etc/init.d/gitlab restart
/etc/init.d/gitlab_ci restart
That's all. Just keep in mind, that each time you want a new Ruby version, you will have to login as gitlab_ci_runner and install it from console.
At this point, you should be able to execute puma worker:
# You should execute this from a git user
cd /home/git/gitlab && exec bundle exec puma -C /home/git/gitlab/config/puma.rb
[4419] Puma starting in cluster mode...
[4419] * Version 2.9.0 (ruby 2.1.2-p95), codename: Team High Five
[4419] * Min threads: 4, max threads: 32
[4419] * Environment: production
[4419] * Process workers: 2
[4419] * Preloading application
[4419] * Listening on unix:///home/git/gitlab/tmp/puma/sock
Init Script
To manage my Pumas I use Jungle. You can read more about it here. From this point, I assume that you have figured out a way to autostart GitLab Puma process (if not, you'll have to start it each time manually - good luck!).
Unfortunately it is not all. Default GitLab init script (provided with GitLab sources) will try to run Unicorn, so we need to silent it (but we need to keep the Sidekiq part).
To do so, we have to change the /etc/init.d/gitlab script.
start_gitlab() method (line 165) - we have to comment the else case:
# Then check if the service is running. If it is: don't start again.
if [ "$web_status" = "0" ]; then
echo "The Unicorn web server already running with pid $wpid, not restarting."
# else
# Remove old socket if it exists
# rm -f "$socket_path"/gitlab.socket 2>/dev/null
# Start the web server
# RAILS_ENV=$RAILS_ENV bin/web start
fi
wait_for_pids() method (line 78) - we have to remote the first condition from while loop. We no longer check for web_server_pid_path:
wait_for_pids(){
# We are sleeping a bit here mostly because sidekiq is slow at writing it's pid
i=0;
while [ ! -f $sidekiq_pid_path ]; do
sleep 0.1;
i=$((i+1))
if [ $((i%10)) = 0 ]; then
echo -n "."
elif [ $((i)) = 301 ]; then
echo "Waited 30s for the processes to write their pids, something probably went wrong."
exit 1;
fi
done
echo
}
There are some other places that you could modify - so you would not get any warnings, but hey! Those are just warnings. What I did above is an absolute minimum for starting/stopping Sidekiq without any Unicorn errors.
Nginx server block
And an example Nginx server block (virtual host) config: