Table des matières

Gitea - Gestionnaire git

À propos de la gestion de version

Qu'est-ce que la gestion de version et pourquoi devriez-vous vous en soucier ?

Un gestionnaire de version est un système qui enregistre l'évolution d'un fichier ou d'un ensemble de fichiers au cours du temps de manière à ce qu'on puisse rappeler une version antérieure d'un fichier à tout moment.

Si vous êtes un dessinateur ou un développeur web, et que vous voulez conserver toutes les versions d'une image ou d'une mise en page (ce que vous souhaiteriez assurément), un système de gestion de version (VCS en anglais pour Version Control System) est un outil qu'il est très sage d'utiliser. Il vous permet de ramener un fichier à un état précédent, ramener le projet complet à un état précédent, comparer les changements au cours du temps, voir qui a modifié quelque chose qui pourrait causer un problème, qui a introduit un problème et quand, et plus encore.

Utiliser un VCS signifie aussi généralement que si vous vous trompez ou que vous perdez des fichiers, vous pouvez facilement revenir à un état stable. De plus, vous obtenez tous ces avantages avec une faible surcharge de travail.

Les systèmes de gestion de version distribués

Les systèmes de gestion de version distribués ou DVCSs en anglais pour Distributed Version Control Systems (tel que Git, Mercurial, Bazaar or Darcs), les clients n'extraient plus seulement la dernière version d'un fichier, mais ils dupliquent complètement le dépôt. Ainsi, si le serveur disparaît, et si les systèmes collaboraient via ce serveur, n'importe quel dépôt d'un des clients peut être copié sur le serveur pour le restaurer. Chaque extraction devient une sauvegarde complète de toutes les données.

De plus, un grand nombre de ces systèmes gère particulièrement bien le fait d'avoir plusieurs dépôts avec lesquels travailler, vous permetant de collaborer avec différents groupes de personnes de manière différentes simultanément dans le même projet. Cela permet la mise en place de différentes chaînes de traitement qui ne sont pas réalisables avec les systèmes centralisés, tels que les modèles hiérarchiques.

Avantages de GIT

Git est un gestionnaire de version, libre et très performant. Il possède de nombreux avantages par rapport à svn, notamment, la possibilité de travailler localement. C’est à dire de faire des “commits” local et de les éditer localement avant de les pousser vers un serveur pour qu'ils soient intégrés au dépôt central.

Voici une liste d’avantage que possède git par rapport à svn :

Qu'est ce que Gitea

Gitea est un fork de Gogs. Un outil pour gérer des dépôts Git via une interface web. Cela propose une gestion des tickets attachés au projet, des pages de Wiki, une gestion des utilisateurs et des groupes d'utilisateurs et des liens vers de l'intégration continue.

Gitea, tout comme Gogs, se veut être multiplateforme, léger, en un binaire unique et Open Source !

L'équipe de Gitea explique sur son blog pourquoi elle a forké le projet. Je résumerais la chose ainsi : Gogs ne possède qu'une et une seule porte d'entrée aux contributions, c'est à dire un seul développeur. Ce qui, à long terme, ne permet probablement pas d'en assurer la pérennité. Gitea résout le problème en proposant plusieurs personnes pour maintenir le projet. Personnes précédemment choisies par la communauté.

Comparaison Gitea

Pour nous aider à déterminer si Gitea est adapté à nos besoins, voici comment il se compare aux autres options auto-hébergées de Git.

Sachez que nous ne vérifions pas régulièrement les modifications apportées aux fonctionnalités des autres produits pour que cette liste soit obsolète.

Symboles utilisés dans le tableau:

✓ - pris en charge

/ - pris en charge avec des fonctionnalités limitées

✘ - non pris en charge

Caractéristiques générales

Feature Gitea Gogs GitHub EE GitLab CE GitLab EE BitBucket RhodeCode CE
Open source and free
Low resource usage (RAM/CPU)
Multiple database support
Multiple OS support
Easy upgrade process
Markdown support
Static Git-powered pages
Integrated Git-powered wiki
Deploy Tokens
Repository Tokens with write rights
Built-in Container Registry
External git mirroring
FIDO U2F (2FA)
Built-in CI/CD
Subgroups: groups within groups

Code management

Feature Gitea Gogs GitHub EE GitLab CE GitLab EE BitBucket RhodeCode CE
Repository topics
Repository code search
Global code search
Git LFS 2.0
Group Milestones
Granular user roles (Code, Issues, Wiki etc)
Verified Committer ?
GPG Signed Commits
Reject unsigned commits
Repository Activity page
Branch manager
Create new branches
Web code editor
Commit graph

Issue Tracker

Feature Gitea Gogs GitHub EE GitLab CE GitLab EE BitBucket RhodeCode CE
Issue tracker
Issue templates
Labels
Time tracking
Multiple assignees for issues
Related issues
Confidential issues
Comment reactions
Lock Discussion
Batch issue handling
Issue Boards
Create new branches from issues
Issue search
Global issue search
Issue dependency

Pull/Merge requests

Feature Gitea Gogs GitHub EE GitLab CE GitLab EE BitBucket RhodeCode CE
Pull/Merge requests
Squash merging
Rebase merging
Pull/Merge request inline comments
Pull/Merge request approval
Merge conflict resolution
Restrict push and merge access to certain users
Revert specific commits or a merge request
Pull/Merge requests templates
Cherry-picking changes

3rd-party integrations

Feature Gitea Gogs GitHub EE GitLab CE GitLab EE BitBucket RhodeCode CE
Webhook support
Custom Git Hooks
AD / LDAP integration
Multiple LDAP / AD server support
LDAP user synchronization
OpenId Connect support ?
OAuth 2.0 integration (external authorization) ?
Act as OAuth 2.0 provider
Two factor authentication (2FA)
Mattermost/Slack integration
Discord integration
External CI/CD status display

Prérequis Gitea

Installation de git.

[root@git ~]# yum -y install git

Création d'un utilisateur gitea.

[root@git ~]# useradd -m -s /bin/bash gitea

Création de l'arborescence et Affectation des privilèges sur la plateforme.

[root@git ~]# mkdir -p /etc/gitea
[root@git ~]# chmod 750 /etc/gitea
[root@git ~]# mkdir -p /opt/gitea/{data,log,custom}
[root@git ~]# mkdir -p /opt/gitea/custom/{https,mailer}
[root@git ~]# chmod 770 /opt/gitea
[root@git ~]# chown -Rf gitea:gitea /opt/gitea

Déploiement Gitea

On se rend dans l'arborescence dans le répertoire qui va contenir le binaire gitea.

[root@git ~]# cd /usr/local/bin/

Note:

Tous les téléchargements sont fournis avec le support SQLite, MySQL et PostgreSQL, et sont construits avec des ressources incorporées. Cela peut être différent pour les anciennes versions.

Choisissez le fichier correspondant à la plate-forme de destination dans la page de téléchargement, copiez l'URL :

[root@git bin]# wget -O gitea https://dl.gitea.io/gitea/1.4.3/gitea-1.4.3-linux-amd64
--2018-08-09 23:20:42--  https://dl.gitea.io/gitea/1.4.3/gitea-1.4.3-linux-amd64
Résolution de dl.gitea.io (dl.gitea.io)... 104.27.142.155, 104.27.143.155, 2400:cb00:2048:1::681b:8e9b, ...
Connexion vers dl.gitea.io (dl.gitea.io)|104.27.142.155|:443...connecté.
requête HTTP transmise, en attente de la réponse...200 OK
Longueur: 53675088 (51M) [application/octet-stream]
Sauvegarde en : «gitea»
 
100%[================================================================================>] 53 675 088   320KB/s   ds 2m 3s
 
2018-08-09 23:22:46 (425 KB/s) - «gitea» sauvegardé [53675088/53675088]

On modifie le user/group du binaire

[root@git bin]# chown root:root gitea

On rend le binaire exécutable

[root@git bin]# chmod 755 gitea

TEST

Après avoir obtenu le fichier binaire, il peut être testé avec “./gitea web”. Une fois gitea démarré , nous pouvons “tuer” le processus en utilisant Ctrl + C lorsqu'il est lancé manuellement

[root@git bin]# ./gitea web
2018/08/09 23:26:24 [T] AppPath: /opt/gitea/bin/gitea
2018/08/09 23:26:24 [T] AppWorkPath: /opt/gitea/bin
2018/08/09 23:26:24 [T] Custom path: /opt/gitea/bin/custom
2018/08/09 23:26:24 [T] Log path: /opt/gitea/bin/log
2018/08/09 23:26:24 [I] Gitea v1.4.3 built with: bindata, sqlite
2018/08/09 23:26:24 [I] Log Mode: Console(Info)
2018/08/09 23:26:24 [I] XORM Log Mode: Console(Info)
2018/08/09 23:26:24 [I] Cache Service Enabled
2018/08/09 23:26:24 [I] Session Service Enabled
2018/08/09 23:26:24 [I] SQLite3 Supported
2018/08/09 23:26:24 [I] Run Mode: Development
2018/08/09 23:26:24 [I] Listen: http://0.0.0.0:3000
2018/08/09 23:26:24 Serving [::]:3000 with pid 1442
[CONTROL+C]
2018/08/09 23:26:30 Exiting pid 1442.
[root@localhost bin]#

Création d'un service

[root@git ~]# vi /etc/systemd/system/gitea.service
[Unit]
Description=Gitea git server
After=syslog.target
After=network.target
 
[Service]
# Modify these two values and uncomment them if you have
# repos with lots of files and get an HTTP error 500 because
# of that
###
#LimitMEMLOCK=infinity
#LimitNOFILE=65535
RestartSec=2s
Type=simple
User=gitea
Group=gitea
ExecStart=/usr/local/bin/gitea web -c /etc/gitea/gitea.ini
Restart=on-failure
WorkingDirectory=/opt/gitea
 
[Install]
WantedBy=multi-user.target
[root@git ~]# systemctl daemon-reload
[root@git ~]# systemctl enable gitea

Installation de Nginx

Nous allons nous servir d'un serveur web comme reverse-proxy pour rendre accessible notre plateforme de version ingénieur à travers une URL précise.

[root@git ~]# yum install nginx

Pour la création du fichier qui va nous permettre d'utiliser Nginx comme reverse-proxy, il faut se positionner dans le répertoire conf.d du programme:

[root@git ~]# cd /etc/nginx/conf.d

Nous allons créer le reverse-proxy avec une configuration très simple.

[root@git conf.d]# nano gitea.conf

vhost : gitea.conf

upstream gitea{
    server 127.0.0.1:3000;
}
 
server{
    listen      80;
    server_name gitea.oowy.lan;
 
    access_log  /var/log/nginx/gitea.access.log;
    error_log   /var/log/nginx/gitea.error.log;
    ignore_invalid_headers off;
 
    location / {
 
        proxy_set_header    Host            $host:$server_port;
        proxy_set_header    X-Real-IP       $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header    X-Forwarded-Proto $scheme;
 
        proxy_http_version 1.1;
        proxy_request_buffering    off; 
        proxy_buffering            off; 
 
        proxy_pass          http://gitea;
        proxy_read_timeout  90;
 
        proxy_redirect      http://127.0.0.1:3000 http://gitea.oowy.lan;
 
    }
}

On démarre le serveur web Nginx.

[root@git ~]# systemctl start nginx

On active le lancement automatique du programme au (re)démarrage du serveur:

[root@git ~]# systemctl enable nginx

Et on démarre gitea :

[root@git bin]# systemctl start gitea

Installation Gitea

Une fois toutes les étapes réalisées, nous allons procéder à la configuration du produit.

Se rendre à l'URL : http://<NOM_FQDN_SERVER_GITEA>/

Note:

Par défaut, tout les champs concernant les répertoires de Gitea (data/log/etc…) sont déjà configurés.

Il ne restera qu'a choisir le type de base de donnée voulu. Ici, nous allons sélectionner SQLite.

Attention:

Mettre à jour le champs “Domain” et “Application URL” avec votre nom de domaine.

Exemple : git.oowy.fr au lieu de localhost.

Une fois l'installation terminée, il suffira de créer un user.

Attention:

Si le compte administrateur n'est pas renseigné dans la section “Admin Account Settings” de l'installeur alors le premier user qui sera crée sur la plateforme Gitea sera automatiquement promu “Administrateur”.

Notre plateforme Gitea est opérationnelle.

Administration

Après avoir installé le serveur de gestion de code Gitea, la prochaine action est probablement la bonne gestion des utilisateurs. La méthode d'authentification utilisateur standard dans la plupart des entreprises est LDAP/AD. Il n'est pas justifié de gérer une base de données utilisateur distincte pour l'authentification de Gitea si vous utilisez un serveur LDAP.

Nous allons donc configurer le backend LDAP comme base de données pour l'authentification des utilisateurs.

Les pré-requis pour cette configuration sont:

Serveur LDAP existant ( Active Directory / FreeIPA) Serveur Gitea installé et fonctionnel Administrateur LDAP

FreeIPA

Création d'un compte de service

Accédez à votre serveur LDAP(FreeIPA) et créez un compte de service via la ligne de commande.

[root@auth01 ~]# nano ServiceAccounts.ldif
dn: uid=sa-gitea,cn=sysaccounts,cn=etc,dc=oowy,dc=lan
changetype: add
objectclass: account
objectclass: simplesecurityobject
uid: sa-gitea
userPassword: <your_password>
passwordExpirationTime: 20380119031407Z
nsIdleTimeout: 0

Importez le LDIF (changez localhost par le serveur IPA si nécessaire). Une invite pour le mot de passe Directory Manager sera présentée

[root@auth01 ~]# ldapmodify -h localhost -p 389 -x -D "cn=Directory Manager" -W -f ServiceAccounts.ldif
Enter LDAP Password: 
adding new entry "uid=sa-gitea,cn=sysaccounts,cn=etc,dc=oowy,dc=lan"

Nous allons ensuite créer 2 groupes.

Ajoutez un groupe IPA pour la gestion des utilisateurs “gitea_users”

[root@auth01 ~]# ipa group-add --desc="Gitea Users" gitea_users

Ajoutez un groupe IPA pour la gestion des administrateurs “gitea_admins”

[root@auth01 ~]# ipa group-add --desc="Gitea Admins" gitea_admins

Note:

Pour les erreurs concernant les informations d'identification IPA, exécutez kinit admin et fournissez le mot de passe du compte d'administrateur de domaine.

Configuration de Gitea

Arrivé à cette étapes nous allons tout simplement ajouter une nouvelle source d'authentification. Cliquer sur : Site Administration > Authentication Sources > Add Authentication Sources

Dans le cadre de notre plateforme, le type LDAP (via BindDN) est utilisé car une option de synchronisation est disponible, et les valeurs saisies sont en relation avec l'installation faite de FreeIPA

Microsoft AD

Création d'un compte de service

Accédez à votre serveur Active Directory et créez un compte de service.

Nous allons créer un utilisateur “sa-gitea”

Nous allons ensuite créer 2 groupes.

Maintenant que nous disposons d'un compte de service ainsi que de nos 2 groupes, Nous allons configurer Gitea.

Configuration de Gitea

Arrivé à cette étapes nous allons tout simplement ajouter une nouvelle source d'authentification. Cliquer sur : Site Administration > Authentication Sources > Add Authentication Sources

Dans le cadre de notre plateforme, le type LDAP (via BindDN) est utilisé car une option de synchronisation est disponible, et les valeurs saisies sont en relation avec l'installation faite sur notre Active Directory.

Synchronisation des utilisateurs

Dans le précédent formulaire, l'option Enable user synchronization est activé afin d'avoir un référencement d'utilisateurs à jour en fonction de l'annuaire.

Note:

La synchronisation est réalisée une fois par jour par défaut. Ceci est modifiable dans le fichier app.ini, section cron.sync_external_users.

Cependant, il est possible de déclencher manuellement la synchronisation depuis l'onglet Dashboard. Un ensemble d'opération est disponible et il faut exécuter Synchronize external user data.

Mise à jour de Gitea

Mise à jour vers une nouvelle version

Nous pouvons mettre à jour une nouvelle version de gitea en stoppant gitea et en remplaçant le binaire dans “/opt/gitea/bin/” et en redémarrant l'instance. Le nom du fichier binaire ne doit pas être modifié pendant la mise à jour pour éviter les problèmes dans les référentiels existants.

Il est recommandé de faire une sauvegarde avant de mettre à jour l'installation.

Nous commençons par arrêter le service.

[root@srv ~]# systemctl stop gitea
Redirecting to /bin/systemctl stop gitea.service

On renomme l'ancien binaire.

[root@gitea bin]# mv gitea gitea.1.4

On télécharge la nouvelle version.

[root@gitea bin]# wget -O gitea https://dl.gitea.io/gitea/1.5/gitea-1.5-linux-amd64
--2018-08-30 00:17:23--  https://dl.gitea.io/gitea/1.5/gitea-1.5-linux-amd64
Résolution de dl.gitea.io (dl.gitea.io)... 104.27.143.155, 104.27.142.155, 2400:cb00:2048:1::681b:8f9b, ...
Connexion vers dl.gitea.io (dl.gitea.io)|104.27.143.155|:443...connecté.
requête HTTP transmise, en attente de la réponse...200 OK
Longueur: 60473144 (58M) [application/octet-stream]
Sauvegarde en : «gitea»
 
100%[====================================================================================================================>] 60 473 144   222KB/s   ds 2m 26s
 
2018-08-30 00:19:50 (404 KB/s) - «gitea» sauvegardé [60473144/60473144]

On rend le binaire executable.

[root@gitea bin]# chmod +x gitea

On relance Gitea.

[root@gitea bin]# systemctl start gitea

Annexe

https://docs.gitea.io/en-us/

https://docs.gitea.io/en-us/authentication/

Quelques explications sur la source d'authentification

Paramètre Valeur
Authentication Name FreeIPA/ActiveDirectory - Nom, affiché dans l'interface, de la source de connexion.
Security Protocol Unencrypted - Type de connexion
Host auth01.oowy.lan - FQDN / IP du serveur d'authentification
Port 389
Bind DN uid=sa-gitea,cn=sysaccounts,cn=etc,dc=oowy,dc=lan - Le compte utilisé pour se connecter à l'annuaire lors de la synchronisation.
Bind Password Mot de passe du compte Bind DN. Un message d'avertissement est présenté indiquant qu'il est préférable d'utiliser un compte en lecture seule.
User Search Base cn=users,cn=accounts,dc=oowy,dc=lan - La base de recherche des utilisateurs.
User Filter (&(memberOf=CN=gitea_users,CN=groups,CN=accounts,DC=oowy,DC=lan)(uid=%s)) - L'appartenance au groupe gitea-Users est mis en place dans ce filtre.
Admin Filter (memberOf=CN=gitea_admins,CN=groups,CN=accounts,DC=oowy,DC=lan) - Ce filtre permet d'identifier si l'utilisateur est dans le groupe gitea-Admins afin de donner les droits d'administration.
Username attribute uid - Correspond à l'attribut pour le nom de l'utilisateur, pourrait être laissé vide pour utilisateur l'identifiant de connexion.
First name attribute givenName - Attribut contenant le prénom de l'utilisateur.
Surname attribute sn - Attribut contenant le nom de l'utilisateur.
Email attribute mailAttribut - contenant le mail de l'utilisateur.