A highly customizable python script to backup your GitLab Community Edition server.
Python
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
GitLabBackup.py
LICENSE.md
README.md
config_email.json

README.md

GitLab Community Edition Backup

A highly customizable python script to backup your GitLab Community Edition server.

Requirements

GitLabBackup requires Python 2.7 or higher and is only tested on Linux-like systems ;)

How it works

GitLabBackup uses the GitLab API to retrieve your projects on your GitLab Community Edition server and make a backup of them with Git !

How to use it

Clone the repo using Git:

git clone https://github.com/PierrePIRONIN/GitLabBackup

Then just launch GitLabBackup.py with, at least, the mandatory arguments:

python GitLabBackup.py <MY_GITLAB_SERVER_URL> <MY_GITLAB_PRIVATE_TOKEN>

Arguments

Argument Position Optional Default Description
MY_GITLAB_SERVER_URL 1 No Your GitLab-CE server url
MY_GITLAB_PRIVATE_TOKEN 2 No Your GitLab-CE private token
--ssh_port 3+ Yes 22 The ssh port used to clone your GitLab projects
--backup_dir 3+ Yes <CURRENT_DIR>/repos_backup The parent directory where your GitLab projects will be cloned
--config_email 3+ Yes <CURRENT_DIR>/config_email.json The JSON file containing configuration of email notifications

Here is an example with all the arguments and a redirection of log:

python GitLabBackup.py <MY_GITLAB_SERVER_URL> <MY_GITLAB_PRIVATE_TOKEN> --ssh_port 2222 --backup_dir /data/gitlab/backups --config_email /data/gitlab/config/email_notifications.json > ./log 2>&1

Email notifications

GitLabBackup could be configured to send an email after the backup processed sucessfully.

This feature is enabled if the option --config_email is set correctly (or if a file named config_email.json is present aside GitLabBackup.py i.e. the default value for --config_email option).

Structure

The config_email.json must respect the following schema:

{
  "from": "backup@my.domain.com",
  "to": "me@gmail.com",
  "smtp_url": "my_provider_smtp_url",
  "smtp_login": "backup@my.domain.com",
  "smtp_password": "MY_SECRET_SMTP_PASSWORD"
}

In addition of this mandatory fields, you could customize the following ones (the given values are the default ones):

{
  ...
  "subject": "Backup GitLab", # email subject
  "message": "Your GitLab projects were backup sucessfully.", # email body
  "enable_ssl": True, # send email through ssl or not
  "port": 465, # or 587 if enable_ssl is false or everyone you want
}

Scheduling

Here is a simple scheduling crontab's entry. The backup will be triggered every Sunday at 2:00 AM.

0 2 * * 0 cd MY_BACKUP_DIR; python GitLabBackup.py <MY_GITLAB_SERVER_URL> <MY_GITLAB_PRIVATE_TOKEN> > ./log 2>&1

Enjoy ! ;)

License

© Pierre PIRONIN, 2015. Licensed under an MIT license.