Gitolite provides a way to manage Git repositories, control access to those repositories, and maintain a central configuration using simple configuration files and SSH keys.
Automating Gitolite Installation with Ansible
The Ansible tasks outlined in this article are designed to simplify the installation and configuration of Gitolite on your server. These tasks can automatically handle the entire setup process, including prerequisites like installing necessary packages and configuring system users and groups.
This automation significantly reduces the risk of human error and ensures a consistent setup across different environments.
The Ansible tasks:
---
# Automating Gitolite Installation with Ansible
# License: MIT
# Author: James Cherti
# URL: https://www.jamescherti.com/ansible-install-gitolite-linux/
- name: Install Gitolite
block:
- name: Check if the Operating System is supported
fail:
msg: "Operating System family is not supported: {{ ansible_os_family }}"
when: ansible_os_family not in ["Debian", "RedHat"]
- name: Install Gitolite on Debian-based Systems
apt:
name: gitolite3
when: ansible_os_family == "Debian"
- name: Install Gitolite on RedHat-based Systems
yum: name=gitolite3
when: ansible_os_family == "RedHat"
- name: Create Gitolite system group
group:
name: "{{ gitolite_group }}"
system: true
- name: Create Gitolite system user
user:
name: "{{ gitolite_user }}"
group: "{{ gitolite_group }}"
home: "{{ gitolite_home }}"
shell: "{{ gitolite_shell }}"
create_home: true
system: true
- name: Ensure Gitolite home directory exists with proper permissions
file:
state: directory
path: "{{ gitolite_home }}"
owner: "{{ gitolite_user }}"
group: "{{ gitolite_group }}"
mode: 0700
- name: Configure Gitolite SSH key
block:
- name: Generate Gitolite SSH key pair if it does not exist
become: true
become_user: "{{ gitolite_user }}"
command: ssh-keygen -t rsa -b 4096 -f {{ gitolite_ssh_key_path | quote }} -N ""
args:
creates: "{{ gitolite_ssh_key_path }}"
- name: Set permissions for the Gitolite .ssh directory
file:
path: "{{ gitolite_ssh_directory }}"
owner: "{{ gitolite_user }}"
group: "{{ gitolite_user }}"
mode: 0700
- name: Set permissions for the SSH public key
file:
path: "{{ gitolite_ssh_key_path }}.pub"
owner: "{{ gitolite_user }}"
group: "{{ gitolite_user }}"
mode: 0644
- name: Set permissions for the SSH private key
file:
path: "{{ gitolite_ssh_key_path }}"
owner: "{{ gitolite_user }}"
group: "{{ gitolite_user }}"
mode: 0600
- name: Setup Gitolite
block:
- name: Initialize Gitolite with the admin public key
become: true
become_user: "{{ gitolite_user }}"
command:
argv:
- "gitolite"
- "setup"
- "-pk"
- "{{ gitolite_ssh_public_key_path }}"
args:
creates: /var/lib/gitolite/repositories/gitolite-admin.git
Code language: YAML (yaml)
The required Ansible variables:
---
# Automating Gitolite Installation with Ansible
# License: MIT
# Author: James Cherti
# URL: https://www.jamescherti.com/ansible-install-gitolite-linux/
gitolite_user: gitolite
gitolite_group: gitolite
gitolite_shell: /bin/bash
gitolite_home: "/var/lib/{{ gitolite_user }}"
gitolite_ssh_directory: "{{ gitolite_home }}/.ssh"
gitolite_ssh_key_path: "{{ gitolite_ssh_directory }}/id_rsa"
gitolite_ssh_public_key_path: "{{ gitolite_ssh_directory }}/id_rsa.pub"
Code language: YAML (yaml)