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 :
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}
Observabilité (Grafana / Prometheus)¶
Metriques Prometheus¶
Activer l'endpoint de metriques dans app.ini :
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 :
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)"]