Dépannage et configuration avancée de Danger en pipeline CI/CD

Contexte et Prérequis

Danger automatisé l'analyse des demandes d'extraction (Pull Requests) pour appliquer des règles de qualité de code. Cependant, son intégration dans des écosystèmes complexes peut générer des erreurs. Ce guide technique détaille les correctifs pour les blocages fréquents liés à l'environnement, l'authentification et l'exécution des scripts.

Résolution des Conflits d'Environnement

Incompatibilité de l'Interpréteur Ruby

Lorsque Danger est exécuté dans des projets non-Ruby, l'image de base du CI possède souvent une version obsolète de l'interpréteur.

# Gestionnaire de versions asdf pour une compatibilité multi-projets
asdf plugin add ruby
asdf install ruby 3.2.2
asdf local ruby 3.2.2

Absence de Fichier de Dépendances (Gemfile)

Les projets Node.js ou Python n'ont pas de Gemfile, ce qui bloque l'initialisation de Bundler.

# Désactivation de la vérification via variable d'environnement
DANGER_SKIP_GEMFILE_CHECK=true bundle exec danger

Intégration et Authentification CI

Échec d'Authentification sur GitHub Actions

Les tokens par défaut peuvent manquer de scopes ou le checkout peut être insuffisant pour calculer les diffs.

name: Analyse de Code Automatisée
on:
  pull_request:
    types: [opened, synchronize, reopened]

jobs:
  audit:
    runs-on: ubuntu-22.04
    steps:
      - name: Récupération de l'historique complet
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - name: Exécution de l'analyse
        uses: danger/danger@main
        env:
          GITHUB_TOKEN: ${{ secrets.SERVICE_ACCOUNT_TOKEN }}

Exécution sur les Forks Externes

Les secrets ne sont pas injectés dans les PRs provenant de forks pour des raisons de sécurité, faisant planer le script.

# Vérification conditionnelle robuste en Bash
if [[ -n "$GITHUB_TOKEN" ]]; then
  bundle exec danger
else
  echo "Analyse différée : token indisponible pour les contributeurs externes."
fi

Permissions et Détection de Spam

Si les commentaires sont validés par l'API mais invisibles, le compte de service a probablement été flaggé par les algorithmes anti-spam de GitHub. Il est impératif d'utiliser un compte d'application GitHub (GitHub App) ou un token PAT (Personal Access Token) avec les scopes public_repo ou repo correctement configurés, et d'éviter les partages de tokens entre multiples organisations.

Débogage Local et Inspection

Simulation de Pull Requests

Tester les règles sans pousser de commits réels.

# Ciblage d'une PR spécifique
bundle exec danger pr "https://github.com/organisation/depot/pull/899"

# Analyse basée sur la branche de base
bundle exec danger local --base=develop

Introspection de l'État Interne

Utilisation de Pry pour inspecter les objets exposés par Danger.

require 'pry'

# Affichage des fichiers modifiés avant l'arrêt
puts "Fichiers impactés : #{git.modified_files.join(', ')}"
binding.pry

# Commandes disponibles dans la session REPL :
# git.added_files
# git.commits.map(&:message)

Gestion des Règles et Optimisation

Validation Statique du Dangerfile

Prévenir les erreurs de syntaxe Ruby avant l'exécution en CI.

# Vérification de la syntaxe
ruby -wc Dangerfile

# Exécution avec traçage détaillé
bundle exec danger local --verbose

Épinglage des Versions de Plugins

Éviter les ruptures de compatibiltié lors des mises à jour mineures des plugins communautaires.

# Importation avec contrainte de version stricte
danger.import_dangerfile(gem: "danger-linter_config", version: "~> 2.1.0")

Optimisation des Performances et Timeouts

Les appels système directs dans le Dangerfile bloquent le thread principal et causent des timeouts. Il faut privilégier les API natives de Danger.

# ❌ Pratique déconseillée : Lente et bloquante
# fail("Trop de lignes") if `find . -name "*.rb" | xargs wc -l`.to_i > 5000

# ✅ Approche optimisée : Utilisation des métadonnées Git natives
warn("Volume de modifications conséquent") if git.insertions > 1500

Spécificités Réseau et Entreprise

Configuration GitHub Enterprise (GHE)

Redirection des requêtes API vers les serveurs internes.

export DANGER_GITHUB_HOST="git.entreprise-locale.corp"
export DANGER_GITHUB_API_BASE="https://git.entreprise-locale.corp/api/v3"

Traversée de Proxy Corporatif

Injection des certificats et routage proxy pour les environnements isolés.

export HTTP_PROXY="http://identifiant:mdp@proxy.reseau.local:8080"
export HTTPS_PROXY="http://identifiant:mdp@proxy.reseau.local:8080"

Tableaux de Référence

Checklist de Déploiement

Paramètre Obligatoire Notes Techniques
Interpréteur Ruby Oui Version 3.x recommandée pour le support natif
Token d'Authentification Oui GitHub App ou PAT avec droits d'écriture
Profondeur de Checkout Oui fetch-depth: 0 requis pour les diffs

Matrice de Compatibilité

Version Danger Ruby Minimum Caractéristiques Principales
9.x.x 3.0.0 Support natif des GitHub Apps, performances améliorées
8.x.x 2.6.0 Stabilité CI, corrections de bugs réseau
7.x.x 2.4.0 Version héritée, fin de support progressive

Étiquettes: danger github-actions Ruby code-review devops

Publié le 29 juin à 07h39