Table des matières

Qu'est-ce que GitLab ?

GitLab est un référentiel de code source ouvert et une plate-forme de développement collaborative. Il est développé sur la base du système de contrôle de version Git. GitLab est l'une des meilleures plates-formes Web pour l'hébergement de codes sources de projets.

Nous allons expliquer comment installer et configurer Gitlab sur CentOS 7.

Prérequis

Système

Distributions linux supportées

Hardware

Pour 100 utilisateurs.

Software

Installer les dépendances nécessaires pour l'installation de Gitlab.

# apt -y install curl vim openssh-server ca-certificates

Ensuite, installez “Postfix” pour envoyer des e-mails de notification. Si vous souhaitez utiliser une autre solution pour envoyer des courriels, veuillez sauter cette étape et configurer un serveur SMTP externe après l'installation de GitLab.

# apt -y install postfix

Note:

Lors de l'installation de Postfix, un écran de configuration peut apparaître. Sélectionnez “Site Internet” et appuyez sur la touche Entrée. Utilisez le DNS externe de votre serveur pour le “nom de courrier” et appuyez sur la touche Entrée. Si d'autres écrans apparaissent, continuez à appuyer sur la touche Entrée pour accepter les valeurs par défaut.

Installation

Ajouter le dépôt de paquets GitLab.

# curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | bash

Ensuite, installez le paquet GitLab. Remplacez “https://gitlab.example.com” par l'URL à laquelle vous souhaitez accéder à votre instance GitLab. L'installation configurera et démarrera automatiquement GitLab à cette URL.

Pour les URLs “https://”, GitLab demandera automatiquement un certificat avec Let's Encrypt, qui nécessite un accès HTTP entrant et un nom d'hôte valide. Vous pouvez également utiliser votre propre certificat ou simplement utiliser “http://”.

# export EXTERNAL_URL="gitlab.oowy.lan" 
# apt install gitlab-ee

Configurer l'URL principale de Gitlab

Attention:

Si gitlab n'est pas fonctionnel, il est fort probable que l'URL à l'étape précédente n'ai pas était prise en compte

La configuration principale de GitLab se trouve dans le répertoire “/etc/gitlab”. Allez dans ce répertoire et éditez le fichier de configuration 'gitlab.rb' avec vim.

# cd /etc/gitlab
# nano gitlab.rb

Dans la configuration de GitLab, allez à la ligne 9 “external_url” et changez l'URL en votre URL “gitlab.oowy.lan”.

external_url 'http://gitlab.oowy.lan'.

Enregistrez le fichier et quittez l'éditeur.

Nous devons maintenant exécuter la commande ci-dessous en tant que root pour appliquer la nouvelle configuration de gitlab.

# gitlab-ctl reconfigure

Accès à Gitlab

Lors de votre première visite, vous serez redirigé vers un écran de réinitialisation du mot de passe. Fournissez le mot de passe du compte initial de l'administrateur et vous serez redirigé vers l'écran de connexion. Utilisez le nom d'utilisateur root. Celui-ci est le compte par défaut pour vous connecter.

Administration de gitlab

Inscription

Vous êtes autonome pour créer un compte sur la plateforme.

Merci de respecter la convention prenom.nom lors de votre enregistrement.

Une fois votre compte créé, vous pouvez créer des projets comme bon vous semble dans votre espace personnel.

Les Groupes

Avec les groupes GitLab, vous pouvez rassembler des projets connexes et permettre aux membres d'accéder à plusieurs projets à la fois.

Les groupes peuvent également être imbriqués dans des sous-groupes.

Pour créer un groupe.

Les Projets

Accueil du projet

Cette page permet d'avoir toutes les informations sur le projet.

Le fichier README.md est automatiquement affiché et doit permettre de comprendre les tenants et les aboutissants du projet, ainsi que les moyens pour installer le projet ou collaborer.

Si le projet vous intéresse, mettez-le en favori pour le retrouver facilement sur la page d'accueil ou dans le menu“

Création d'un projet

Créer un projet, c'est créer un espace public ou privé ou vous pouvez versionner des fichiers et collaborer.

Lorsque vous créez un nouveau projet, il peut résider :

Plusieurs options de visibilité sont disponibles :

Visibilité Invité
Privé Vous serez le seul à pouvoir accéder au projet et à donner des permissions à l'unité
Interne Seuls les utilisateurs authentifiés peuvent voir le projet
Public N'importe qui, même non authentifié peut voir le projet

Une fois le projet crée, vous pouvez commencer à l'utiliser.

Si le projet est privé, vous pouvez inviter des utilisateurs à collaborer.

Gestion des droits

Vous pouvez inviter des utilisateurs individuellement, ou par groupe.

Role Permissions
Guest Lire et commenter les issues
Reporter Gérer les issues, voir le code
Developer Modifier les fichiers, issues
Master Administration du projet

Options du projet

Un certain nombre d'options permettent de personnaliser le projet.

Parmi les options réglables, vous pouvez :

Les permissions

Les utilisateurs ont des permissions différentes selon le niveau d'accès qu'ils ont dans un groupe ou un projet particulier.

Si un utilisateur est à la fois dans le projet d'un groupe et le projet lui-même, le niveau d'autorisation le plus élevé est utilisé.

Quand on créé un projet, nous en sommes le “Owner”, et accordons des permissions à d'autres membres si nécéssaire.

Permission Invité Reporter Developer Master Owner
Issues
Gérer les issues
Effacer une issue
Lire le wiki
Editer le wiki
Commenter
Edit un commentaire
Lire le code
Contribuer (merge request)
git push
Gérer l'équipe projet
Configurer les pages projet
Créer un projet dans groupe
Transférer un projet
Effacer un project
Voir les jobs
Configurer les hooks
Voir les environments
Créer un environment

cf [documentation officielle](https://docs.gitlab.com/ee/user/permissions.html#project-members-permissions)

Forker un projet

Pour contribuer à un projet sur lequel nous n'avons pas les droits en écriture, il est d'usage de forker le projet, d'apporter les modifications (corrections ou améliorations) dans votre propre copie du projet, puis d'envoyer cette contribution en tant que merge request au projet original (qu'on appelle upstream).

Vous pouvez forker un projet depuis la page web du projet, c.a.d. le copier, soit dans votre espace personnel, soit dans un groupe pour lequel vous avez les permissions suffisantes.

Une fois forker, vous êtes en possession d'une copie du projet sur laquelle vous pouvez travailler indépendamment puis éventuellement soumettre des contributions utiles au projet d'origine (upstream)

Gestion des fichiers

Les fichiers d'un repository peuvent être modifiés de multiples façons :

Demandes de fusion

Lorsque vous modifiez des fichiers sur un projet qui ne vous appartient pas, vous pouvez soumettre vos changements pour validation au propriétaire du projet.

Ceci permet de faire une revue, à l'issue de laquelle le propriétaire pourra directement intégrer vos changements dans le projet.

Le format Markdown

Le format markdown permet d'enrichir facilement du texte brut. Dans GitLab, on peut écrire du markdown a peu près partout : fichiers .md, commentaires, issues…

Ce format est exploitable par de nombreux outils, qui permettent par exemple de générer des sites web.

Documentation complète ici : https://fr.wikipedia.org/wiki/Markdown

Quelques outils pratiques :

Gestion des issues

Le système d'issues de GitLab est avancé et puissant !

Vous pouvez créez des catégories (tags), assigner les tâches, les estimer, gérer des roadmaps, ajouter des fichiers, commenter, recevoir des notifications, etc… un lieu idéal pour centraliser les discussions autour d'un projet et favoriser la collaboration transparente.

Issue

Pour accéder aux issues du projet :

Vous accédez alors à la liste des issues du projet.

Agile

Les issues peuvent être organisées dans des “boards” type “kanban”. Vous pouvez créer vos propres boards pour organiser vos priorités.

Les issues peuvent être groupés par “milestones” (sprints). Ceci permet de grouper des tâches pour en suivre la complétion.

Gestion des Services

Vérifier l'état des services

$ sudo gitlab-ctl status
run: alertmanager: (pid 3067) 12s; run: log: (pid 2682) 115s
run: gitaly: (pid 3028) 14s; run: log: (pid 2146) 243s
run: gitlab-exporter: (pid 3027) 14s; run: log: (pid 2619) 136s
run: gitlab-workhorse: (pid 3000) 15s; run: log: (pid 2508) 159s
run: grafana: (pid 3091) 11s; run: log: (pid 2922) 33s
run: logrotate: (pid 2561) 149s; run: log: (pid 2581) 146s
run: nginx: (pid 2535) 155s; run: log: (pid 2548) 151s
run: node-exporter: (pid 3012) 14s; run: log: (pid 2602) 139s
run: postgres-exporter: (pid 3080) 11s; run: log: (pid 2719) 109s
run: postgresql: (pid 2275) 234s; run: log: (pid 2326) 233s
run: prometheus: (pid 3044) 13s; run: log: (pid 2663) 123s
run: puma: (pid 2447) 173s; run: log: (pid 2460) 170s
run: redis: (pid 2079) 252s; run: log: (pid 2101) 249s
run: redis-exporter: (pid 3036) 13s; run: log: (pid 2642) 128s
run: sidekiq: (pid 2467) 167s; run: log: (pid 2479) 166s

Démarrer Gitlab

$ sudo gitlab-ctl start
ok: run: alertmanager: (pid 3960) 1s
ok: run: gitaly: (pid 3970) 0s
ok: run: gitlab-exporter: (pid 3979) 0s
ok: run: gitlab-workhorse: (pid 3981) 1s
ok: run: grafana: (pid 3990) 0s
ok: run: logrotate: (pid 4008) 1s
ok: run: nginx: (pid 4014) 0s
ok: run: node-exporter: (pid 4021) 1s
ok: run: postgres-exporter: (pid 4029) 0s
ok: run: postgresql: (pid 4036) 1s
ok: run: prometheus: (pid 4038) 0s
ok: run: puma: (pid 4055) 1s
ok: run: redis: (pid 4064) 0s
ok: run: redis-exporter: (pid 4070) 0s
ok: run: sidekiq: (pid 4076) 1s

Arrêt Gitlab

$ sudo gitlab-ctl stop
ok: down: alertmanager: 1s, normally up
ok: down: gitaly: 1s, normally up
ok: down: gitlab-exporter: 0s, normally up
ok: down: gitlab-workhorse: 1s, normally up
ok: down: grafana: 0s, normally up
ok: down: logrotate: 1s, normally up
ok: down: nginx: 0s, normally up
ok: down: node-exporter: 1s, normally up
ok: down: postgres-exporter: 0s, normally up
ok: down: postgresql: 0s, normally up
ok: down: prometheus: 0s, normally up
ok: down: puma: 1s, normally up
ok: down: redis: 0s, normally up
ok: down: redis-exporter: 0s, normally up
ok: down: sidekiq: 0s, normally up

Administration avancée

Fonctionnalité de base

Maintenant que notre plateforme gitlab est opérationnelle, nous allons changer les configurations suivantes : - Vérification automatique des mises à jours. - Changement du début de la semaine.

Pour activer la vérification automatique des mises à jours, il faudra se rendre dans la section : Settings > Metrics and Profiling. Cocher “Enable version check” et “Enable usage ping” dans la section “Usage statistics”

Pour définir le premier jour de la semaine, il faudra se rendre dans la section : Settings > Preferences. Séléctionner “Monday” dans la liste déroulante se trouvant dans la section “Localization”

Mise à jour de gitlab

Comme tout logiciel, Gitlab suit un process de mise à jour bien défini.

Dans notre exemple, la plateforme se trouve en version 13.0.3. Nous allons donc réaliser la mise à jour de la plateforme avec la dernière version stable, à savoir la version 13.1.1

Faire une sauvegarde (facultatif)

Si vous souhaitez effectuer une sauvegarde avant la mise à jour, la commande ci-dessous sauvegardera les données dans “/var/opt/gitlab/backups” par défaut.

$ sudo gitlab-rake gitlab:backup:create STRATEGY=copy

Mise à jour du GitLab

Mise à jour vers la dernière version du GitLab.

$ sudo apt-get update && sudo apt-get install gitlab-ce

Vérification

Voilà, notre plateforme est bien déployée avec la dernière version fournie par la société Gitlab Inc°

Désactiver la création des users

Pour désactiver la possibilité à un utilisateurs de créer un compte, il nous suffira de décocher une option dans le back-office de gitlab.

Dans Gitlab > Admin area > Settings > General > décocher → “Signup enabled

Active Directory

La gestion d'un grand nombre d'utilisateurs dans le GitLab peut devenir un fardeau pour les administrateurs du système. La croissance d'une organisation s'accompagne d'une augmentation du nombre de comptes d'utilisateurs. Maintenir ces comptes utilisateurs synchronisés entre plusieurs applications d'entreprise devient souvent une tâche qui prend beaucoup de temps.

Active Directory est un service d'annuaire populaire compatible LDAP fourni par Microsoft, inclus dans tous les systèmes d'exploitation modernes Windows Server.

GitLab prend en charge l'intégration LDAP depuis la version 2.2. La synchronisation de groupe LDAP de GitLab a été ajoutée à GitLab Enterprise Edition dans la version 6.0. L'intégration LDAP est devenue l'une des fonctionnalités les plus populaires de GitLab.

Pour configurer notre gitlab avec un contrôleur de domaine active directory 2016

Création d'un compte de service

Nous allons créer un utilisateur du domaine qui va permettre à la plateforme gitlab.

Configurer le fichier gitlab.rb

Editer le fichier “gitlab.rb” et renseigner les paramètres suivants :

# nano /etc/gitlab/gitlab.rb
...
gitlab_rails['ldap_enabled'] = true
# gitlab_rails['prevent_ldap_sign_in'] = false
 
###
gitlab_rails['ldap_servers'] = { 
'main' => { # 'main' is the GitLab 'provider ID' of this LDAP server
   'label' => 'ActiveDirectory',
   'host' => 'dc01.oowy.lan',
   'port' => 389,
   'uid' => 'sAMAccountName',
   'encryption' => 'plain', # "start_tls" or "simple_tls" or "plain"
   'verify_certificates' => true,
   'bind_dn' => 'CN=sa-gitlab,OU=services-account,OU=Ressources,DC=oowy,DC=lan',
   'password' => 'Password91',
   'smartcard_auth' => false,
   'active_directory' => true,
   'allow_username_or_email_login' => false,
   'lowercase_usernames' => false,
   'block_auto_created_users' => false,
   'base' => 'OU=utilisateurs,OU=Ressources,DC=oowy,DC=lan',
   'user_filter' => '',
   'attributes' => {
     'username' => ['uid', 'userid', 'sAMAccountName'],
     'email' => ['mail', 'email', 'userPrincipalName'],
     'name' => 'cn',
     'first_name' => 'givenName',
     'last_name' => 'sn'
   },
   'lowercase_usernames' => false
 },
}

Lancer la commande reconfigure

# gitlab-ctl reconfigure

Lancer un check

# gitlab-rake gitlab:ldap:check

Backup Gitlab

GitLab permet de prendre une copie de sauvegarde de votre plateforme en utilisant une simple commande.

» Gitlab 12.2 et supérieur.

# gitlab-backup create
2021-03-20 22:57:34 +0100 -- Dumping database ...
Dumping PostgreSQL database gitlabhq_production ... [DONE]
2021-03-20 22:57:42 +0100 -- done
2021-03-20 22:57:42 +0100 -- Dumping repositories ...
 * gitlab-instance-b4b5ecbb.wiki (@groups/d4/73/d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35.wiki) ...

» Gitlab 12.1 et inférieur.

# gitlab-rake gitlab:backup:create
 
2020-11-29 20:58:14 +0100 -- Dumping database ...
Dumping PostgreSQL database gitlabhq_production ... [DONE]
2020-11-29 20:58:16 +0100 -- done
2020-11-29 20:58:16 +0100 -- Dumping repositories ...
 * gitlab-instance-26a21388/monitoring (@hashed/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b) ...
 * gitlab-instance-26a21388/monitoring (@hashed/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b) ... [SKIPPED]
 * gitlab-instance-26a21388/monitoring.wiki (@hashed/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b.wiki) ...
 * gitlab-instance-26a21388/monitoring.wiki (@hashed/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b.wiki) ... [SKIPPED]
 * gitlab-instance-26a21388/monitoring.design (@hashed/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b.design) ...
 * gitlab-instance-26a21388/monitoring.design (@hashed/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b.design) ... [SKIPPED]
...

Le fichier tar de sauvegarde seront créés dans le répertoire “/var/opt/gitlab/backups” par défaut.

Restore Gitlab

GitLab permet de restaurer la copie de sauvegarde de votre plateforme.

Tout d'abord, vérifier que votre sauvegarde est bien présente dans le repertoire : /var/opt/gitlab/backups

Maintenant, arrêtez les processus qui sont liés à la base de données en utilisant les commandes suivantes.

# gitlab-ctl stop unicorn
...
# gitlab-ctl stop sidekiq

Note:

Les commandes ci-dessus peuvent également être utilisées pour libérer temporairement une partie de la mémoire en les arrêtant

Vous pouvez vérifier l'état des services du GitLab en utilisant la commande ci-dessous

# gitlab-ctl status

Maintenant, restaurez la sauvegarde en utilisant l'horodatage de la copie de sauvegarde

# gitlab-rake gitlab:backup:restore BACKUP = 1606679901_2020_11_29_13.6.1-ee_gitlab_backup.tar

Une fois l'opération terminée, redémarrez les composants GitLab en utilisant la commande ci-dessous

# gitlab-ctl restart

Vérifiez maintenant le GitLab en nettoyant la base de données comme indiqué ci-dessous.

# gitlab-rake gitlab:check SANITIZE = true

Le paramètre SANITIZE = true supprime toutes les adresses électroniques parce qu'elles sont confidentielles, supprime les variables CI et les jetons d'accès tels qu'ils peuvent être utilisés dans l'instance de production.

Reset root password

Pour réinitialiser le mot de passe root, connectez-vous d'abord à votre serveur avec les privilèges de root.

Démarrez une console Ruby on Rails avec cette commande :

# gitlab-rails console -e production
--------------------------------------------------------------------------------
 GitLab:       13.0.3 (e2397fc2acb) FOSS
 GitLab Shell: 13.2.0
 PostgreSQL:   11.7
--------------------------------------------------------------------------------
Loading production environment (Rails 6.0.3)
irb(main):001:0>

Attendez que la console soit chargée.

Il existe de multiples façons de trouver votre utilisateur.

irb(main):001:0> user = User.where(id: 1).first
=> #<User id:1 @root>

Vous pouvez maintenant changer votre mot de passe :

irb(main):002:0> user.password = 'secret_pass'
=> "secret_pass"
irb(main):003:0> user.password_confirmation = 'secret_pass'
=> "secret_pass"

N'oubliez pas de sauvegarder les modifications.

irb(main):004:0> user.save!
Enqueued ActionMailer::DeliveryJob (Job ID: eceeb5ea-8f96-4189-98c1-a87babc41928) to Sidekiq(mailers) with arguments: "DeviseMailer", "password_change", "deliver_now", #<GlobalID:0x00007f00c053f5d0 @uri=#<URI::GID gid://gitlab/User/1>>
=> true

Sortez de la console et essayez de vous connecter avec votre nouveau mot de passe.

GitLab Container Registry

Troubleshooting

Suppression impossible repo

https://gitlab.com/gitlab-org/gitlab-foss/-/issues/27457

gitlab-rails console
 
irb(main):001:0> Project.unscoped.where(pending_delete: true).map(&:name_with_namespace)
=> ["applaudience / filming-locations-map", "applaudience / showtime-data-scraper-sources"]
irb(main):002:0>
irb(main):003:0* Project.unscoped.where(pending_delete: true)
=> #<ActiveRecord::Relation [#<Project id:97 applaudience/filming-locations-map>, #<Project id:76 applaudience/showtime-data-scraper-sources>]>
irb(main):004:0> p = Project.unscoped.find(76)
=> #<Project id:76 applaudience/showtime-data-scraper-sources>
irb(main):005:0> p.pending_delete
=> true
irb(main):006:0> p.pending_delete = false
=> false
irb(main):007:0> p.save
=> true
irb(main):008:0> p.errors.full_messages
=> []
irb(main):009:0> u = User.find_by_username('gajus')
=> #<User id:4 @gajus>
irb(main):010:0> Projects::DestroyService.new(p, u, {}).execute
Scoped order and limit are ignored, it's forced to be batch order and batch size
=> true

Annexe

https://about.gitlab.com/install/

https://docs.gitlab.com/omnibus/update/

https://docs.gitlab.com/ee/administration/auth/ldap/index.html

https://docs.gitlab.com/ee/raketasks/backup_restore.html

https://gitlab.oowy.fr/help/user/project/deploy_tokens/index.md

https://stackoverflow.com/questions/25689231/getting-gitlab-ci-to-clone-private-repositories