Aller au contenu

Integration

Ce chapitre décrit comment connecter Gitea aux autres services du catalogue : authentification (Keycloak), CI/CD (Gitea Actions), registre de paquets, observabilité (Grafana/Prometheus) et DNS interne.


SSO avec Keycloak (OIDC)

Côté Keycloak

Créer un client OIDC dans le realm de la DSI :

Parametre Valeur
Client ID gitea
Client Protocol openid-connect
Access Type confidential
Valid Redirect URIs https://gitea.example.com/user/oauth2/keycloak/callback
Base URL https://gitea.example.com/

Récupérer le Client Secret dans l'onglet Credentials.

Côté Gitea

Configurer la source d'authentification OIDC dans app.ini ou via l'interface admin :

; app.ini — section optionnelle, la configuration via UI est recommandee
[oauth2]
ENABLE = true

Via l'interface admin (Site Administration > Authentication Sources > Add) :

Champ Valeur
Type OAuth2
Name keycloak
OAuth2 Provider OpenID Connect
Client ID gitea
Client Secret (secret récupère depuis Keycloak)
OpenID Connect Auto Discover URL https://keycloak.example.com/realms/dsi/.well-known/openid-configuration
Scopes openid profile email groups

Mappage des groupes

Pour synchroniser les équipes Keycloak avec les organisations Gitea, activer le claim groups :

{
  "name": "groups",
  "protocol": "openid-connect",
  "protocolMapper": "oidc-group-membership-mapper",
  "config": {
    "full.path": "false",
    "id.token.claim": "true",
    "access.token.claim": "true",
    "claim.name": "groups",
    "userinfo.token.claim": "true"
  }
}

Provisionnement automatique

Avec le mappage de groupes, les utilisateurs sont automatiquement ajoutes aux organisations Gitea correspondantes a leur connexion. Cela elimine la gestion manuelle des permissions.


CI/CD avec Gitea Actions

Architecture

Gitea Actions est compatible avec le format GitHub Actions. Les workflows sont definis dans .gitea/workflows/ (ou .github/workflows/).

graph LR
    Dev["Developpeur"] -->|push| Gitea -->|webhook| Runner["act_runner"] -->|execute le workflow| Result["Resultat"]
    Runner -->|rapport de statut| Gitea

Déployer act_runner

# Ajouter au podman-compose.yml
  act_runner:
    image: docker.io/gitea/act_runner:latest
    container_name: gitea-runner
    restart: always
    depends_on:
      - gitea
    environment:
      GITEA_INSTANCE_URL: https://gitea.example.com
      GITEA_RUNNER_REGISTRATION_TOKEN: ${RUNNER_TOKEN}
      GITEA_RUNNER_NAME: runner-01
      GITEA_RUNNER_LABELS: "ubuntu-latest:docker://node:20,linux:host"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - runner_data:/data

Enregistrer le runner

# Obtenir un token d'enregistrement (via l'admin UI ou API)
curl -X POST "https://gitea.example.com/api/v1/admin/runners/registration-token" \
  -H "Authorization: token ${GITEA_ADMIN_TOKEN}"

# Enregistrer le runner
podman exec -it gitea-runner act_runner register \
  --instance https://gitea.example.com \
  --token "${RUNNER_TOKEN}" \
  --name runner-01 \
  --labels "ubuntu-latest:docker://node:20"

Exemple de workflow

# .gitea/workflows/ci.yml
name: CI
on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Run tests
        run: |
          echo "Running tests..."
          make test

      - name: Build
        run: |
          echo "Building..."
          make build

Registre de paquets (Gitea Packages)

Gitea Packages fournit un registre multi-format integre. La configuration dans app.ini est déjà en place (section [packages]).

Formats supportes

Format Usage Commande d'authentification
Docker Images conteneur podman login gitea.example.com
npm Paquets JavaScript/TypeScript .npmrc avec token
PyPI Paquets Python pip install --index-url
Maven Artefacts Java settings.xml avec credentials
NuGet Paquets .NET nuget source add
Cargo Crates Rust cargo login
Helm Charts Kubernetes helm repo add
Generic Fichiers arbitraires API REST upload

Exemple : publier une image Docker

# Authentification
podman login gitea.example.com -u mon-user -p mon-token

# Tag et push
podman tag mon-app:latest gitea.example.com/mon-org/mon-app:1.0.0
podman push gitea.example.com/mon-org/mon-app:1.0.0

Exemple : publier un paquet npm

# .npmrc
@mon-org:registry=https://gitea.example.com/api/packages/mon-org/npm/
//gitea.example.com/api/packages/mon-org/npm/:_authToken=${GITEA_TOKEN}
npm publish --registry https://gitea.example.com/api/packages/mon-org/npm/

Observabilité (Grafana / Prometheus)

Metriques Prometheus

Activer l'endpoint de metriques dans app.ini :

[metrics]
ENABLED = true
TOKEN   = changeme-metrics-token

L'endpoint est disponible sur https://gitea.example.com/metrics.

Configuration Prometheus

# prometheus.yml
scrape_configs:
  - job_name: gitea
    bearer_token: changeme-metrics-token
    static_configs:
      - targets: ["gitea.example.com:443"]
    scheme: https
    metrics_path: /metrics

Metriques cles

Metrique Description
gitea_accesses Nombre total de requêtes HTTP
gitea_issues Nombre total d'issues
gitea_organizations Nombre d'organisations
gitea_repositories Nombre de dépôts
gitea_users Nombre d'utilisateurs
process_resident_memory_bytes Mémoire utilisee par Gitea

Dashboard Grafana

Importer le dashboard communautaire Gitea (ID 17802) depuis Grafana.com ou créer un dashboard avec les panels suivants :

  • Requêtes HTTP par code de réponse (2xx, 4xx, 5xx)
  • Nombre de dépôts et utilisateurs
  • Utilisation mémoire et CPU
  • Latence des requêtes API (p50, p95, p99)

DNS interne

Créer un enregistrement DNS interne pour que les services de la zone Chaîne logicielle résolvent Gitea :

; Zone DNS interne
gitea.example.com.    IN  A      10.0.1.10
gitea.example.com.    IN  AAAA   fd00::1:10

Résolution interne uniquement

Si Gitea est classifie Confidentiel, l'enregistrement DNS ne doit etre resolvable que depuis la zone Chaîne logicielle et les zones autorisees. Pas de résolution publique.


Mirroring de dépôts externes

Gitea permet de configurer des miroirs bidirectionnels avec des dépôts externes (GitHub, GitLab).

Mirror pull (externe vers Gitea)

Importer un dépôt externe comme miroir en lecture seule :

curl -X POST "https://gitea.example.com/api/v1/repos/migrate" \
  -H "Content-Type: application/json" \
  -H "Authorization: token ${GITEA_ADMIN_TOKEN}" \
  -d '{
    "clone_addr": "https://github.com/org/repo.git",
    "repo_name": "repo",
    "repo_owner": "mon-org",
    "mirror": true,
    "mirror_interval": "8h",
    "service": "github",
    "auth_token": "ghp_xxx"
  }'

Mirror push (Gitea vers externe)

Configurer un push mirror depuis l'interface du dépôt : Settings > Mirror Settings > Push Mirror.

Parametre Valeur
Remote Repository https://github.com/org/repo.git
Authorization Token d'accès personnel
Sync Interval 8h0m0s

Résumé des integrations

graph TD
    KC["Keycloak (OIDC)"] -->|authentification| Gitea["Gitea<br/>SCM + LFS + Packages"]
    DNS["DNS interne"] --> Gitea
    Prom["Prometheus<br/>(metriques)"] --> Gitea
    Gitea --> Grafana["Grafana (dashboard)"]
    Gitea --> Runner["act_runner (CI/CD)"]
    Gitea --> Webhooks["Webhooks (notifications)"]
    Gitea --> Miroirs["Miroirs (sync)"]