6 votes

comment afficher les résultats de l'audit npm dans jenkins et faire échouer le build

J'aimerais exécuter la commande npm audit npm dans le cadre de la compilation ci et afficher d'une manière ou d'une autre la sortie dans une compilation ci de Jenkins.

Si une vulnérabilité critique est découverte, j'aimerais faire échouer la construction en cours en renvoyant un code de sortie non nul.

2voto

smelm Points 181

Je ne connais pas de plugin permettant d'atteindre cet objectif, mais une analyse manuelle pourrait fonctionner (si vous utilisez un pipeline).

def output = sh script: "npm audit", returnStdout: true
def summary = output.split("\n")[-1] //get the summary from the last line
...

Vous pouvez ensuite utiliser une expression rationnelle ou une autre manipulation de chaîne pour trouver le nombre qui suit le nombre critique. Vous pouvez également utiliser archiveArtifacts pour sauvegarder l'ensemble de la sortie dans l'historique de construction.

2voto

R. Oosterholt Points 1745

Inspiré par ce poste J'ai réalisé cela en créant un 'Compiler Warnings parser' (analyseur des avertissements du compilateur) personnalisé ;

  1. installer Plugin d'avertissements

  2. configurer un analyseur personnalisé :
    Gérer Jenkins -> Configurer le système -> Section 'Avertissements du compilateur'.
    Nom : Analyseur d'audit NPM
    Nom du lien : Analyseur d'audit NPM
    Nom du rapport de tendance : Vulnérabilités détectées
    Expression régulière : [\w+-]+\s+([\w+-]+)\s+([\w\.-@]+)\s+(>=\s)*([\w\.-@]+)\s+(.+?(?=http))([\w\.-@]+)\s+(.*)
    Mappage script :

    import hudson.plugins.warnings.parser.Warning
    import hudson.plugins.analysis.util.model.Priority

    priority = Priority.HIGH; if ( "low" == matcher.group(2) ) { priority = Priority.LOW; } else if ( "moderate" == matcher.group(2) ) { priority = Priority.NORMAL; }

    String msg = "Vulnerability found in '" + matcher.group(1) + "' (" + matcher.group(6) + ") , prio: " + matcher.group(2) + " Fix: " + matcher.group(5) + " info: " + matcher.group(5);
    return new Warning('package.json', 0, 'NSP Warning', matcher.group(1), msg, priority);

  3. configurer le travail ;

  4. Añadir Exécuter l'interprète de commandes étape de construction :

    npm install

    parseable report for 'compile warning post build step'

    npm audit --parseable >> npm_audit_report_parseable.txt || true # suppress npm audit error code

  5. Añadir [Déclassé] Recherche d'avertissements de compilateur l'étape postérieure à la construction :
    'Scanner les fichiers de l'espace de travail' -> Modèles de fichiers : npm_audit_report_parseable.txt
    'Scanner les fichiers de l'espace de travail' -> Analyseur : Analyseur d'audit NPM

En option, vous pouvez configurer des "seuils de santé/état", qui déterminent quand un build échoue et lorsqu'il est marqué comme instable .


Autre solution : utiliser la fonction Plugin de contrôle des dépendances

  1. installer Plugin de contrôle des dépendances
  2. configurer un outil global "Dependency-Check" :
    Gérer Jenkins -> Configuration globale de l'outil -> 'Dependency-Check' -> 'Ajouter un Dependency-Check'
  3. configurer le travail ;
  4. Añadir Invoquer le contrôle des dépendances étape de construction :
    Installation avec contrôle des dépendances : choisir l'outil global configuré
    J'ai également configuré des Arguments --scan /non/existing/dir pour éviter de trouver des exploits dans les fichiers liés aux paquets installés comme 'demo', 'docs', etc. parce que le 'dependency check plugin' effectue un scan récursif complet des fichiers dont nous n'avons pas besoin parce que le scanner npm trouve déjà les résultats de 'npm audit'.
  5. Añadir Publier les résultats du contrôle de dépendance l'étape postérieure à la construction :
    Rapport XML : **/dependency-check-report.xml

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X