Tutoriel abapGit : Contrôle de version pour ABAP Cloud et ABAP classique

Catégorie
DevOps
Publié
Auteur
Johannes

abapGit est l’outil open source le plus important pour le contrôle de version du code ABAP. Dans ce tutoriel, vous apprendrez à installer, configurer et utiliser efficacement abapGit pour la gestion professionnelle du code - tant pour ABAP classique que pour le développement ABAP Cloud.

Qu’est-ce qu’abapGit ?

abapGit est un client Git open source pour ABAP, entièrement écrit en ABAP. Il permet de stocker, versionner et partager du code ABAP dans des dépôts Git avec d’autres développeurs.

Pourquoi abapGit est-il si important ?

Dans le monde SAP classique, le contrôle de version a toujours été un point faible :

  • Le système de transport est bon pour les déploiements, mais mauvais pour le développement collaboratif
  • Les versions dans le système sont limitées et ne permettent pas de branches
  • Les revues de code étaient pratiquement impossibles
  • La sauvegarde et la récupération étaient compliquées

abapGit résout tous ces problèmes en transférant les objets ABAP dans des dépôts Git standardisés :

Avant (sans abapGit)Après (avec abapGit)
Versions uniquement dans le système SAPHistorique Git complet
Pas de branchingFeature Branches, Bugfix Branches
Revues de code difficilesPull Requests avec vue diff
Partage basé sur les transportsClone et Push comme tout autre langage
Vendor Lock-inCode sauvegardable sur GitHub/GitLab

abapGit vs. gCTS

Une question fréquente : Quand utiliser abapGit et quand gCTS ?

CritèreabapGitgCTS
Public cibleDéveloppeursIT Operations
FocusVersioning du codeAutomatisation des transports
Intégration GitComplète (Push/Pull)Export uniquement
Open SourceOuiNon (Produit SAP)
CoûtGratuitLicence SAP requise
Pipeline CI/CDConfigurable manuellementIntégration SAP native
RecommandationDéveloppement & CollaborationDéploiements Enterprise

En résumé : abapGit pour les développeurs, gCTS pour le CI/CD Enterprise. Les deux peuvent être combinés.


Installation et configuration

Prérequis

  • SAP NetWeaver 7.02 ou supérieur (pour ABAP classique)
  • ABAP Environment sur SAP BTP (pour ABAP Cloud)
  • Compte GitHub, GitLab, Azure DevOps ou autre fournisseur Git
  • ADT (Eclipse) pour ABAP Cloud ou SE80/SE38 pour ABAP classique

Installation sur systèmes On-Premise

Étape 1 : Télécharger le report abapGit

La version la plus récente se trouve sur github.com/abapGit/abapGit.

  1. Naviguez vers Releases
  2. Téléchargez le fichier zabapgit_standalone.prog.abap

Étape 2 : Créer le report dans le système SAP

" Transaction SE38 ou SE80
" Créer un nouveau report : ZABAPGIT_STANDALONE
" Ou : ZABAPGIT (si vous voulez installer le package complet)
  1. Ouvrez SE38 (Éditeur ABAP)
  2. Créez un nouveau report : ZABAPGIT_STANDALONE
  3. Copiez le code complet du fichier téléchargé
  4. Activez le report

Étape 3 : Première exécution

" Lancez le report
REPORT zabapgit_standalone.

Au premier lancement, vous serez invité à :

  • Installer les certificats SSL (pour les connexions HTTPS)
  • Configurer les paramètres proxy (si présent)

Installation dans ABAP Cloud (SAP BTP)

Dans ABAP Cloud, la situation est différente : abapGit n’est pas directement installable, car il n’y a pas d’accès à SE38/SE80. À la place, il existe deux alternatives :

Option 1 : abapGit pour Eclipse (Plugin ADT)

  1. Ouvrez Eclipse avec ADT
  2. Allez dans Help → Install New Software
  3. Ajoutez l’Update Site : https://eclipse.abapgit.org/updatesite/
  4. Installez abapGit for ABAP Development Tools
  5. Redémarrez Eclipse

Option 2 : Interface Repository abapGit (à partir de SAP BTP ABAP Environment 2302)

SAP fournit une interface de dépôt native :

  1. Ouvrez ADT
  2. Clic droit sur votre projet ABAP Cloud
  3. Configure → Link ABAP Repository to Git

Cette intégration est encore en développement, mais offre un support SAP natif.

Configuration du fournisseur Git

Configurer une clé SSH (recommandé)

Pour une communication sécurisée avec GitHub/GitLab :

Terminal window
# Générer une clé SSH (sur votre machine locale)
ssh-keygen -t ed25519 -C "[email protected]"
# Afficher la clé publique
cat ~/.ssh/id_ed25519.pub

Ajoutez ensuite la clé publique dans votre fournisseur Git sous Settings → SSH Keys.

Personal Access Token (Alternative)

Pour l’accès HTTPS :

  1. GitHub : Settings → Developer Settings → Personal Access Tokens
  2. GitLab : Preferences → Access Tokens
  3. Créez un token avec la permission repo
  4. Utilisez le token comme mot de passe dans abapGit

Workflows de base

Cloner un dépôt (Clone)

La première étape est de cloner un dépôt existant dans votre système SAP.

Dans abapGit Standalone :

  1. Lancez ZABAPGIT_STANDALONE
  2. Cliquez sur + Clone
  3. Entrez l’URL du dépôt : https://github.com/username/repo.git
  4. Choisissez le package cible (ex. ZABAP_GIT_DEMO)
  5. Cliquez sur Clone

Dans ADT (Eclipse) :

  1. Ouvrez la vue abapGit Repositories (Window → Show View)
  2. Cliquez sur + (Link Repository)
  3. Sélectionnez votre projet ABAP et entrez l’URL
  4. Choisissez ou créez un package

Mettre en staging (Stage)

Après avoir modifié des objets ABAP, les modifications doivent être préparées pour le commit :

  1. Ouvrez abapGit
  2. Sélectionnez votre dépôt
  3. Cliquez sur Stage
  4. Vous voyez une liste de tous les objets modifiés
  5. Sélectionnez les objets que vous voulez commiter

Vue typique :

Modifications :
[x] ZCL_MY_CLASS (Modified)
[x] ZIF_MY_INTERFACE (Modified)
[ ] ZCL_TEST_CLASS (Modified) ← Ne pas commiter
[x] ZABAP_PROGRAM (New)

Créer un commit

Un commit enregistre vos modifications dans l’historique Git.

Bonnes pratiques pour les messages de commit :

feat: Nouvelle validation pour le numéro client implémentée
- Vérification du numéro client dans ZCL_CUSTOMER_VALIDATION
- Tests unitaires pour les cas limites ajoutés
- Message d'erreur localisé (DE/EN)
Refs: JIRA-1234

Conventions :

  • feat: Nouvelle fonctionnalité
  • fix: Correction de bug
  • refactor: Refactoring sans changement de fonctionnalité
  • docs: Documentation
  • test: Tests ajoutés ou corrigés

Push vers Remote

Après le commit, les modifications doivent être poussées vers le dépôt distant :

  1. Cliquez sur Push
  2. Authentifiez-vous (clé SSH ou token)
  3. Confirmez le push
Pushing to origin/main...
✓ 3 objects pushed successfully

Pull depuis Remote

Pour récupérer les modifications des autres développeurs :

  1. Cliquez sur Pull
  2. abapGit compare la version distante et locale
  3. En cas de conflits : résolution manuelle requise

Attention : Pull écrase les objets locaux ! Sauvegardez d’abord vos modifications.


Intégration avec GitHub et GitLab

Configurer un dépôt GitHub

Étape 1 : Créer un nouveau dépôt

Terminal window
# Sur github.com ou via CLI
gh repo create mon-projet-abap --private

Étape 2 : Comprendre la structure du dépôt

abapGit génère une structure de dossiers standardisée :

mon-projet-abap/
├── src/
│ ├── zcl_my_class.clas.abap
│ ├── zcl_my_class.clas.locals_def.abap
│ ├── zcl_my_class.clas.locals_imp.abap
│ ├── zcl_my_class.clas.testclasses.abap
│ ├── zcl_my_class.clas.xml
│ ├── zif_my_interface.intf.abap
│ ├── zif_my_interface.intf.xml
│ └── zmy_program.prog.abap
├── .abapgit.xml
└── README.md

Conventions de fichiers :

  • .clas.abap - Implémentation de classe
  • .clas.locals_def.abap - Types/constantes locaux
  • .clas.locals_imp.abap - Classes locales
  • .clas.testclasses.abap - Tests ABAP Unit
  • .intf.abap - Définition d’interface
  • .prog.abap - Programme/Report
  • .xml - Métadonnées (package, description, etc.)

Intégration GitLab

GitLab fonctionne de manière identique à GitHub. Différences importantes :

# URL du dépôt GitLab
https://gitlab.com/username/mon-projet-abap.git
# Personal Access Token GitLab
Preferences → Access Tokens → Scope: api, read_repository, write_repository

Intégration Azure DevOps

Pour les environnements Microsoft :

# URL du dépôt Azure DevOps
https://dev.azure.com/organization/project/_git/repository
# Personal Access Token
User Settings → Personal Access Tokens → Scope: Code (Read & Write)

Extraits de code pour scénarios typiques

Scénario 1 : Initialiser un nouveau projet

" 1. Créez un nouveau package dans SE80/ADT
" Package : ZABAP_GIT_DEMO
" Ordre de transport : Local (pour le développement)
" 2. Créez les objets initiaux
CLASS zcl_demo_application DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES if_oo_adt_classrun.
ENDCLASS.
CLASS zcl_demo_application IMPLEMENTATION.
METHOD if_oo_adt_classrun~main.
out->write( 'Bonjour depuis un projet géré par abapGit !' ).
ENDMETHOD.
ENDCLASS.
" 3. Dans abapGit : Lier le dépôt et faire le premier commit

Scénario 2 : Workflow Feature Branch

Terminal window
# Sur votre machine locale (après clone)
git checkout -b feature/nouvelle-validation
# Ou directement dans abapGit :
# 1. Repository → Settings → Default Branch
# 2. Changer manuellement de branche avant le Pull

Dans le système SAP :

  1. Pull la nouvelle branche
  2. Développez votre fonctionnalité
  3. Stage et Commit
  4. Push vers la feature branch
  5. Créez une Pull Request sur GitHub/GitLab

Scénario 3 : Résolution de conflits

Quand deux développeurs ont modifié la même classe :

" Fichier : zcl_shared_class.clas.abap
" <<<<<<< HEAD (votre modification)
METHOD calculate_total.
rv_result = iv_quantity * iv_price * ( 1 - iv_discount ).
ENDMETHOD.
" =======
" >>>>>>> origin/main (modification distante)
METHOD calculate_total.
rv_result = iv_quantity * iv_price.
rv_result = rv_result - ( rv_result * iv_discount / 100 ).
ENDMETHOD.

Solution :

  1. Décidez quelle version est correcte (ou combinez les deux)
  2. Supprimez les marqueurs de conflit
  3. Testez la modification
  4. Commit et Push

Scénario 4 : Configurer .abapgit.xml

La configuration du projet est stockée dans .abapgit.xml :

<?xml version="1.0" encoding="utf-8"?>
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DATA>
<MASTER_LANGUAGE>D</MASTER_LANGUAGE>
<STARTING_FOLDER>/src/</STARTING_FOLDER>
<FOLDER_LOGIC>PREFIX</FOLDER_LOGIC>
<IGNORE>
<item>/.gitignore</item>
<item>/LICENSE</item>
<item>/README.md</item>
<item>/.github/</item>
</IGNORE>
</DATA>
</asx:values>
</asx:abap>

Paramètres importants :

  • MASTER_LANGUAGE : D pour Allemand, E pour Anglais, F pour Français
  • FOLDER_LOGIC : PREFIX (recommandé) ou FULL
  • IGNORE : Fichiers qui ne seront pas importés dans le système SAP

Bonnes pratiques pour le travail en équipe

1. Définir une stratégie de branches

Modèle recommandé pour les projets ABAP :

main (ou master)
├── develop
│ ├── feature/US-001-creer-client
│ ├── feature/US-002-recherche-materiel
│ └── bugfix/FIX-042-calcul-prix
└── release/1.0.0

Règles :

  • main : Uniquement les releases stables et testées
  • develop : Intégration de toutes les fonctionnalités
  • feature/* : Une branche par User Story
  • bugfix/* : Corrections rapides
  • release/* : Candidats release

2. Établir un workflow Pull Request

  1. Développer la fonctionnalité dans sa propre branche
  2. Créer une Pull Request sur GitHub/GitLab
  3. Revue de code par au moins un collègue
  4. Vérifications CI/CD (Syntaxe, tests ABAP Unit)
  5. Merge après approbation
  6. Supprimer la branche après le merge

3. Checklist de revue de code pour ABAP

## Checklist de revue de code ABAP
### Fonctionnalité
- [ ] Le code répond-il aux exigences ?
- [ ] Les cas limites sont-ils traités ?
### Qualité du code
- [ ] Principes Clean ABAP respectés ?
- [ ] Noms de variables parlants ?
- [ ] Pas de Magic Numbers ?
### Performance
- [ ] Pas de SELECT * sans restriction ?
- [ ] Bonne utilisation des index ?
- [ ] Opérations en masse où possible ?
### Tests
- [ ] Tests unitaires présents ?
- [ ] Couverture de test suffisante ?
### Documentation
- [ ] Méthodes publiques documentées ?
- [ ] Logique complexe expliquée ?

4. Respecter les conventions de commit

Utilisez Conventional Commits pour un historique cohérent :

<type>(<scope>): <subject>
<body>
<footer>

Exemples :

feat(customer): Validation pour les numéros clients internationaux
- Vérification du code pays ISO 3166-1 implémentée
- Validation VAT-ID pour les clients UE
- Tests unitaires pour toutes les variantes de pays
Closes #42
fix(pricing): Division par zéro avec remise 0%
Le calcul du prix échouait quand une remise de 0%
était indiquée. Le cas est maintenant géré correctement.
Fixes #57

5. .gitignore pour projets ABAP

Créez un .gitignore pertinent :

# Fichiers spécifiques à l'OS
.DS_Store
Thumbs.db
# Fichiers IDE
.idea/
*.iml
# Configuration locale
.local/
# Fichiers générés
*.log

6. Documentation dans le dépôt

Template README.md :

# Projet : Extension gestion clients
## Aperçu
Ce dépôt contient des extensions personnalisées pour le module SD.
## Installation
1. Clonez le dépôt dans le package `ZCUSTOMER_EXT`
2. Activez tous les objets
3. Exécutez le report de setup `ZCUSTOMER_SETUP`
## Dépendances
- SAP S/4HANA 2023 ou supérieur
- Package `ZABAP_UTILS` (voir autre dépôt)
## Développement
1. Créer une feature branch
2. Implémenter les modifications
3. Ajouter les tests unitaires
4. Créer une Pull Request
## Contact
Mainteneur : [email protected]

Dépannage

Problème : Erreur de certificat SSL

Error: SSL certificate problem: unable to get local issuer certificate

Solution :

  1. Ouvrir la transaction STRUST
  2. SSL Client Standard → Ajouter un certificat
  3. Importer le certificat racine GitHub/GitLab

Problème : Erreur de connexion proxy

Error: Could not connect to proxy

Solution : Dans abapGit → Settings → Proxy :

Proxy Host: proxy.entreprise.fr
Proxy Port: 8080
Bypass: localhost,*.intranet.entreprise.fr

Problème : L’objet ne peut pas être désérialisé

Error: Object ZCL_EXAMPLE could not be deserialized

Causes possibles :

  • Dépendances manquantes (autres classes/interfaces)
  • Version SAP incompatible
  • Métadonnées XML corrompues

Solution :

  1. Importer d’abord les dépendances
  2. Vérifier et corriger le fichier .xml si nécessaire
  3. En dernier recours : créer l’objet manuellement, puis répéter le Pull

Problème : Push rejeté

Error: rejected - non-fast-forward

Solution :

Terminal window
# En local : Fetch les modifications et rebase
git pull --rebase origin main
# Dans abapGit : D'abord Pull, puis résoudre les conflits, puis Push

Conclusion

abapGit révolutionne le développement ABAP en apportant le contrôle de version moderne dans le monde SAP. Les points clés à retenir :

  1. abapGit est indispensable pour le développement ABAP professionnel
  2. Les workflows Git (Branching, Pull Requests) fonctionnent aussi avec ABAP
  3. La collaboration en équipe est massivement améliorée par les revues de code
  4. Sauvegarde et portabilité - votre code vous appartient, pas au système SAP

Prochaines étapes :

  1. Installer abapGit (Standalone ou Plugin ADT)
  2. Cloner ou créer un premier dépôt
  3. Établir le workflow Feature Branch dans l’équipe
  4. Introduire les revues de code via Pull Requests

Articles connexes