Run GitLab in the Cloud

Introduction

One of the first things that you should do before starting a software project is set up a version control system (VCS) for your code. A version control system allows you to track changes for your code, concurrently maintain different versions (eg. production and development) and simplifies the task of merging and integrating contributions from multiple developers. One of the most popular VCSs is Git, a distributed version control and source code management system. Though Git itself is mainly a collection of command line tools, many people manage Git repositories using third party tools and services, such as GitHub, Gitorious or GitLab.

GitLab is a Ruby on Rails web application that helps you manage who has permissions to contribute to which repository. It also includes a wiki, enables code reviews and many other features. GitLab CI is a complementary web application that provides Continuous Integration (CI) closely integrated with Git to run tasks after a new change or run tests in different branches in the repository.

This guide describes how to create your own Git repository and integrate it with a Continuous Integration (CI) server in the cloud using the Bitnami GitLab CE Stack.

NOTE: The steps below assume that you already have the Bitnami GitLab CE Stack running on a cloud server and that you have the credentials for the GitLab administration panel.

Step 1: Create a Git repository using GitLab

The first step is to log in to the GitLab administration panel and upload your public SSH key in the “User’s Profile” section. This key will be necessary to push code into the repository and it will also be needed when granting new users privileges to modify the code.

Next, ensure that you have a Git client installed in your development environment. There are different ways to install Git, but one of the easiest is to use the Bitnami WAMP, LAMP or MAMP Stacks. These provide a complete PHP, MySQL and Apache development environment for Windows, Linux or Mac OS X and also include a Git client by default.

Once you’ve confirmed you have a Git client installed, upload project files to the GitLab repository as shown in the image below. Remember to copy your private SSH key to the correct directory before doing so (usually C:\Users\USERNAME.ssh\id_rsa on Windows, /home/USERNAME/.ssh/id_rsa on Linux and /Users/USERNAME/.ssh/id_rsa on Mac OS X).

If all goes well, you should be able to see the README.txt file in the repository and in the GitLab application.

Step 2: Configure and manage GitLab

The Bitnami GitLab CE Stack can be customized in a variety of ways.

Use a custom domain name

Once the GitLab application is running, you can use a custom domain to access it. The only requirement is that the domain name should point to the server’s IP address.

Configure outgoing email settings

Set project roles

Managing projects from the GitLab application is extremely easy. From the administration panel, add new users or to create teams and groups with different permissions within a project.

GitLab projects can also be set up as public. With this setting, all users have read access to that project and can clone the project with a command like the one below:

$ git clone http://SERVER-IP/gitlab/example.git

Control the servers

GitLab uses the following servers:

A MySQL database

An Apache server configured with a Passenger module for Ruby on Rails applications

A Redis server for storing job messages

A GitLab Sidekiq server for processing the jobs in the background

Check the status of the servers with the command below:

$ sudo /opt/bitnami/ctlscript.sh status

Debug server errors

To troubleshoot server problems, refer to each server’s log files, as described in these instructions. Sidekiq also ships a control panel where it is possible to check the logs and the status of the jobs.

Step 3: Integrate GitLab with GitLab CI

A Continuous Integration process typically performs different tasks: running tests, measuring performance, building releases and other tasks. You can integrate GitLab and GitLab CI to run these tasks automatically.