8
votes

Solution de contournement: Résultats du test en aval agrégé

Autant que je sache, la fonctionnalité "Agrégger les résultats du test en aval" ne fonctionne pas comme prévu (et il est très difficile de trouver une documentation utile). Je voudrais obtenir des fonctionnalités très similaires:

Job Construction Triggers Emplois t1 , t2 en parallèle (où t1 trichrougs, t2 mesure PMD).

scénario 1: Dès que t1 et t2 sont terminés (que je peux obtenir en utilisant le plug-in "Rejoindre"), je veux rassembler les artefacts ( t1 / Findbugs.xml et T2 /pmd.xml). Ensuite, celles-ci sont analysées et de belles statistiques sont générées.

scénario 2 (je l'aime plus): Comme scénario 1, mais l'analyse est effectuée dans le cadre de t1 et t2 (en parallèle!). Dès que t1 et t2 sont terminés, les résultats d'analyse sont combinés dans de jolies statistiques.

mes questions: Pour scénario 1 Je ne sais pas comment faire référence aux projets en aval t1 et t2 . Je pourrais utiliser la dernière construction réussie, mais cela semble bizarre lorsque vous envisagez de nombreux emplois parallèles.

Pour scénario 2, je ne sais pas comment importer les données nécessaires aux plugins de Findbugs / PMD / CheckStyle / Sloccount / ... Selon les graphiques correspondants (aussi?) apparaissent à l'extérieur de t1 / * t2 *.

merci, CARSTEN


1 commentaires

Je pense que cette question peut être généralisée à: Comment puis-je transférer des connaissances d'emplois en aval (finis) en aval de son travail en amont direct qui a déclenché ces emplois (ou à un successeur direct de cet emploi en amont)? Autant que je sache, Jenkins se concentre sur l'autre sens (obtenir des informations sur les emplois en amont).


3 Réponses :


10
votes

Voici un contour pour un scénario un peu plus simple, mais je pense que vous pouvez facilement le généraliser à votre cas de multiples emplois en aval. L'astuce consiste à utiliser des paramètres "marquage" dans les travaux en aval.

laissez p être le travail parent et d être un travail en aval.

  1. une instance (construction) de p invoque d via Plugin de déclenchement paramétré via une étape de construction ( non comme une étape post-construction) et attend d pour finir. Avec d'autres paramètres, p passe à d un paramètre - appelons-le parent_id - basé sur p Build's build_id .
  2. d exécute les tests et les archivent sous forme d'artefacts (avec des rapports JUnit - le cas échéant).
  3. p exécute ensuite un script externe Python (ou Groovy interne) qui trouve la construction appropriée de d via parent_id (vous itheter sur les constructions de d et examinez la valeur du paramètre parent_id ). Le script copie ensuite les artefacts de d à p et p les publie.

    Si vous utilisez Python (c'est ce que je fais) - Utilisez wrapper Python Jenkinsapi . Si vous utilisez Groovy - Utilize plugin groovy et exécutez votre script comme script système. Vous pouvez ensuite accéder à Jenkins via son Java API .


3 commentaires

Merci, cela a aidé! J'ai maintenant les données de T1 et T2 dans mon projet de jointure (celle-ci a commencé dès que T1 et T2 sont terminées).


Aujourd'hui, j'ai remarqué que Build_id n'est pas unique à un travail (deux emplois ont commencé dans la même seconde obtenir le même build_id). Une idée de comment avoir vraiment des identifiants uniques?


Concaténer avec Job_name (E.G. $ {Job_Name} _ $ {build_id})



8
votes

Deux ajouts au poste de Malenkiy_scot:

  1. Vous n'avez pas vraiment besoin d'un script pour l'étape 3 dans la description: "Copier des artefacts d'un autre projet" Étape de construction permet de spécifier le travail source, y compris des paramètres déjà.

    Par exemple, à l'aide de la notation du parent, il peut copier des artefacts de l'exécution correcte du travail d à l'aide de d / parent_id = attendu_value comme "nom du projet".

  2. au lieu de concaténer manuellement $ job_name et $ build_id Vous pouvez utiliser le prédéfini_tag (qui fait essentiellement la même chose) . Voir https: //wiki.jenkins-ci. Org / Display / Jenkins / Building + A + Software + Project # BuildingSoftwareProject-Jenkinssetenvironmentvaribles Pour la liste complète des variables d'environnement standard.


1 commentaires

Est-il possible que quelqu'un de décompresser ce qui se passe ici avec la syntaxe 'd / parent_id = attendu_value'? Toute aide beaucoup appréciée. J'aimerais connecter cela dans les constructions de base abstrait plutôt que de les faire expliciter dans les enfants concrets.



-3
votes

0 commentaires