Erreur lors d'exécution d'un build sur Jenkins

Bonjour, j’ai eu une erreur lorsque le plugin Jenkins a essayé d’exécuter AsqatasunRunnerBuilder.linkToWebapp.

Started by user admin
Building in workspace /var/lib/jenkins/workspace/mon compte
call runner serviceLaunching asqatasun runner with the following options : 
    [bin/asqatasun.sh, 
    -f, /opt/firefox/firefox, 
    -r, Rgaa30, -l, Or, -d, 98, -x, 256, 
    -o, /opt/asqatasun/asqatasun-runner-4.1.0-SNAPSHOT.i386/tmp/log--1190561034.log, 
    -t, Scenario, 
    /opt/asqatasun/asqatasun-runner-4.1.0-SNAPSHOT.i386    /tmp/Mon_Compte_#27]

Analysis terminated. Now Linking To WorkspaceinsertProcedureFile created : /opt/asqatasun/asqatasun-runner-4.1.0-SNAPSHOT.i386/tmp/create-contract-with-scenario-and-create-act.sqlwith content : DROP PROCEDURE IF EXISTS create_contract_if_not_exists_and_link_act;
delimiter |
CREATE PROCEDURE `create_contract_if_not_exists_and_link_act`(
IN userEmail VARCHAR(2048), 
IN contractLabel VARCHAR(2048), 
IN scenarioLabel VARCHAR(2048), 
IN scenario VARCHAR(102400), 
IN auditId INT)
BEGIN
  DECLARE contractId bigint(20);
  DECLARE userId bigint(20);
  DECLARE scenarioId bigint(20);
  DECLARE actId bigint(20);      
  select Id_User into userId FROM TGSI_USER as tu
      WHERE tu.Email1 like userEmail;
  select Id_Contract into contractId FROM TGSI_CONTRACT as tc 
      WHERE tc.USER_Id_User=userId AND tc.Label like contractLabel;      
  IF contractId IS NULL
    THEN
      INSERT INTO TGSI_CONTRACT (Label, Begin_Date, End_Date, USER_Id_User) values (contractLabel, date(now()),
                date_add(date(now()), interval 10 year), userId);
      SELECT LAST_INSERT_ID() INTO contractId; 
      INSERT IGNORE INTO `TGSI_CONTRACT_REFERENTIAL` (`CONTRACT_Id_Contract`, `REFERENTIAL_Id_Referential`) VALUES
	    (contractId,(select Id_Referential FROM TGSI_REFERENTIAL WHERE Code like 'Aw22') );
      INSERT IGNORE INTO `TGSI_CONTRACT_REFERENTIAL` (`CONTRACT_Id_Contract`, `REFERENTIAL_Id_Referential`) VALUES
	    (contractId,(select Id_Referential FROM TGSI_REFERENTIAL WHERE Code like 'Rgaa30'));
      INSERT IGNORE INTO `TGSI_CONTRACT_REFERENTIAL` (`CONTRACT_Id_Contract`, `REFERENTIAL_Id_Referential`) VALUES
	    (contractId,(select Id_Referential FROM TGSI_REFERENTIAL WHERE Code like 'Seo'));
      INSERT IGNORE INTO `TGSI_CONTRACT_FUNCTIONALITY` (`CONTRACT_Id_Contract`, `FUNCTIONALITY_Id_Functionality`) VALUES
	    (contractId,(select Id_Functionality FROM TGSI_FUNCTIONALITY WHERE Code like 'SCENARIO'));
  END IF;
  select contractId;
  select scenarioLabel;
  select scenario;
  select Id_Scenario into scenarioId FROM TGSI_SCENARIO as ts
      WHERE ts.CONTRACT_Id_Contract=contractId 
        AND ts.Label like scenarioLabel
        AND ts.Content like scenario;
  select scenarioId;
  IF scenarioId IS NULL
    THEN  
      INSERT IGNORE INTO `TGSI_SCENARIO` (`Date_Of_Creation`, `Label`, `Content`,`CONTRACT_Id_Contract`) VALUES
        (now(), scenarioLabel, scenario, contractId);
      SELECT LAST_INSERT_ID() INTO scenarioId; 
  END IF;
  select scenarioId;
  INSERT IGNORE INTO `TGSI_ACT` (`Begin_Date`,`End_Date`, `Status`, `CONTRACT_Id_Contract`, `SCOPE_Id_Scope`) VALUES
      (now(),now(), 'COMPLETED', contractId, (select Id_Scope FROM TGSI_SCOPE WHERE Code like 'SCENARIO'));
  SELECT LAST_INSERT_ID() INTO actId; 
  select actId;      
  INSERT IGNORE INTO `TGSI_ACT_AUDIT` (`ACT_Id_Act`,`AUDIT_Id_Audit`) VALUES
      (actId, auditId);      
END  |
delimiter ;ERROR: Build step failed with exception
java.lang.NullPointerException
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1012)
	at jenkins.plugins.asqatasun.AsqatasunRunnerBuilder.linkToWebapp(AsqatasunRunnerBuilder.java:262)
	at jenkins.plugins.asqatasun.AsqatasunRunnerBuilder.perform(AsqatasunRunnerBuilder.java:199)
	at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)
	at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:735)
	at hudson.model.Build$BuildExecution.build(Build.java:206)
	at hudson.model.Build$BuildExecution.doRun(Build.java:163)
	at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:490)
	at hudson.model.Run.execute(Run.java:1735)
	at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
	at hudson.model.ResourceController.execute(ResourceController.java:97)
	at hudson.model.Executor.run(Executor.java:405)
Build step 'Asqatasun Runner' marked build as failure
Finished: FAILURE

Est-ce qu’il y a un moyen pour déboguer ce genre d’erreur? Est-ce qu’il s’agit d’un problème d’installation/configuration?

Bonjour @solael,

En complément de ton message, peux-tu préciser un peu plus l’environnement (OS, version Jenkins / Asqatasun / plugin Jenkins d’Asqa) et aussi la procédure que tu as suivie pour réaliser l’installation (une erreur dans la doc est possible) ?

En regardant le log fourni, j’en déduis que tu tournes sur une version Asqatasun de développement. Tu l’as compilé toi même ou utilisé un tar.gz généré par les push sur Github ?

As-tu vérifié, si un audit de page ou de scénario fonctionne dans la webapp Asqatasun et aussi en ligne de commande avec le runner ?

Si à ce niveau tout fonctionne, c’est donc uniquement sur le plugin qu’il faut te centrer. Vérifier la version, vérifier la configuration du plugin (les chemins et autres options).

Pour les logs, as-tu regardé dans /opt/asqatasun/asqatasun-runner-4(...)/tmp/log--1190561034.log. Je ne sais pas trop ce qu’il peut contenir, mais comme ce fichier est indiqué dans la sortie que tu as postée, cela vaut le coup de regarder.

Pour Asqatasun, les logs sont :

  • /var/log/asqatasun/asqatasun.log
  • /var/log/tomcat7/catalina.out

La webapp fonctionne sans aucun souci. Avant j’ai déjà essayé la version release du plugin et c’est pour ça j’ai compilé moi-même une version snapshot. J’ai suivi toutes les procédures d’installation.

J’ai réinstallé Asqatasun Webapp & Asqatasun-runner sur une toute nouvelle vm ubuntu 16.04 en utilisant les versions release.
Cette fois-ci le plugin fonctionne sans problème, les builds ont terminé jusqu’au bout.
Par contre, les builds ne sont pas affichés dans le webapp comme les contracts. Pourtant j’ai bien saisi un compte Asqatasun valide.

OS : Ubuntu 16.04LTS
Jenkins : 2.60.1
Asqatasun : 4.0.3
Asqatasun-runner : 4.0.3
Plugin Jenkins : 1.3.1

Pour l’installation dans Ubuntu 16, c’est quelle version de tomcat qui tourne ? (rien à voir avec ton problème, mais je suis curieux)

Cette fois-ci le plugin fonctionne sans problème, les builds ont terminé jusqu’au bout. Par contre, les builds ne sont pas affichés dans le webapp comme les contracts. Pourtant j’ai bien saisi un compte Asqatasun valid.

il faudrait regarder en DB, ce qu’il en est, je n’ai plus le nom des tables en tête.

à noter, pour ta 1er installation, tu n’as pas précisé si tu arrivais à lancer un audit via le runner.

C’est Tomcat 7 et Openjdk 8.

L’audit via le runner n’a pas sorti d’erreur, j’ai copié-collé la commande dans Jenkins en précisant le fichier json du selenium builder et je l’ai lancé dans une console.

La différence entre ma première installation et ma deuxième, c’est que j’ai sauté la partie config Apache2/SSL pour la deuxième, j’ai cru que le proxy peut être problématique.

Merci pour toutes les précisions. Là, je ne me rappelle plus trop comment fonctionne le plugin Jenkins. Tiens nous au courant si la situation évolue ou perdure, nous regarderons un peu plus en relançant quelques installations.

@solael, le problème est toujours là ?

Je viens de tester encore plugin Asqatasun à l’entreprise dernière un proxy, on verra si le problème persiste.

@fabrice

J’ai finalement pu faire tourner le plugin Jenkins sous Ubuntu 16.04 à l’entreprise. Par contre, le syndrome que j’ai mentionné en dessus persiste : la visualisation des tests faits par le plugin n’est pas disponible dans l’application web.

En plus, j’ai utilisé un script Selenium pour pouvoir tester une suite des pages. Si je teste avec le script dans l’application web tout se passe bien. Si je lance le même test dans Jenkins, Asqatasun CLI teste que les 2 premières pages et il s’en fout les restes.

Il me semble Asqatasun CLI n’a pas pu gérer le cas quand il s’agit d’un clickElement et non une URL.

{
  "type": "script",
  "seleniumVersion": "2",
  "formatVersion": 2,
  "steps": [
{
  "type": "get",
  "url": "http://drupal-pro-test.douane-gouv.tma/"
},
{
  "type": "get",
  "url": "http://drupal-pro-test.douane-gouv.tma/user/login"
},
{
  "type": "clickElement",
  "locator": {
    "type": "id",
    "value": "edit-simplesamlphp-auth-login-link"
  }
},
{
  "type": "setElementText",
  "locator": {
    "type": "name",
    "value": "user"
  },
  "text": "xxxx"
},
{
  "type": "setElementText",
  "locator": {
    "type": "name",
    "value": "password"
  },
  "text": "xxxx"
},
{
  "type": "clickElement",
  "locator": {
    "type": "css selector",
    "value": "button.btn.btn-success"
  }
},
{
  "type": "get",
  "url": "http://drupal-pro-test.douane-gouv.tma/mon-compte/details"
},

Et log sur Jenkins :

Started by user admin
Building in workspace /var/lib/jenkins/workspace/mon compte details
call runner serviceLaunching asqatasun runner with the following options : [bin/asqatasun.sh, -f, /opt/firefox-runner/firefox, -r, Rgaa30, -l, Ar, -d, 99, -x, 256, -o, /opt/asqatasun-runner-4.0.3.i386/tmp/log--22664997.log, -t, Scenario, /opt/asqatasun-runner-4.0.3.i386/tmp/mon_compte_details_#1]
Audit terminated with success at 2017-08-04 09:13:19.0
Audit Id : 23
Mark : 91.67%
Nb Passed : 22
Nb Failed test : 2
Nb Failed occurences : 2
Nb Pre-qualified : 24
Nb Not Applicable : 226
Nb Not Tested : 274

Subject : http://drupal-pro-test.douane-gouv.tma/
Mark : 91.67%
Nb Passed : 11
Nb Failed test : 1
Nb Failed occurences : 1
Nb Pre-qualified : 12
Nb Not Applicable : 113
Nb Not Tested : 137

Subject : http://drupal-pro-test.douane-gouv.tma/user/login
Mark : 91.67%
Nb Passed : 11
Nb Failed test : 1
Nb Failed occurences : 1
Nb Pre-qualified : 12
Nb Not Applicable : 113
Nb Not Tested : 137

Analysis terminated. Now Linking To WorkspaceinsertProcedureFile created : /opt/asqatasun-runner-4.0.3.i386/tmp/create-contract-with-scenario-and-create-act.sqlwith content : DROP PROCEDURE IF EXISTS create_contract_if_not_exists_and_link_act;

delimiter |
CREATE PROCEDURE `create_contract_if_not_exists_and_link_act`(
IN userEmail VARCHAR(2048), 
IN contractLabel VARCHAR(2048), 
IN scenarioLabel VARCHAR(2048), 
IN scenario VARCHAR(102400), 
IN auditId INT)
BEGIN

  DECLARE contractId bigint(20);
  DECLARE userId bigint(20);
  DECLARE scenarioId bigint(20);
  DECLARE actId bigint(20);
  
  select Id_User into userId FROM TGSI_USER as tu
      WHERE tu.Email1 like userEmail;

  select Id_Contract into contractId FROM TGSI_CONTRACT as tc 
      WHERE tc.USER_Id_User=userId AND tc.Label like contractLabel;
  
  IF contractId IS NULL
    THEN
      INSERT INTO TGSI_CONTRACT (Label, Begin_Date, End_Date, USER_Id_User) values (contractLabel, date(now()),
                date_add(date(now()), interval 10 year), userId);
      SELECT LAST_INSERT_ID() INTO contractId; 
      INSERT IGNORE INTO `TGSI_CONTRACT_REFERENTIAL` (`CONTRACT_Id_Contract`, `REFERENTIAL_Id_Referential`) VALUES
	    (contractId,(select Id_Referential FROM TGSI_REFERENTIAL WHERE Code like 'Aw22') );
      INSERT IGNORE INTO `TGSI_CONTRACT_REFERENTIAL` (`CONTRACT_Id_Contract`, `REFERENTIAL_Id_Referential`) VALUES
	    (contractId,(select Id_Referential FROM TGSI_REFERENTIAL WHERE Code like 'Rgaa30'));
      INSERT IGNORE INTO `TGSI_CONTRACT_REFERENTIAL` (`CONTRACT_Id_Contract`, `REFERENTIAL_Id_Referential`) VALUES
	    (contractId,(select Id_Referential FROM TGSI_REFERENTIAL WHERE Code like 'Seo'));
      INSERT IGNORE INTO `TGSI_CONTRACT_FUNCTIONALITY` (`CONTRACT_Id_Contract`, `FUNCTIONALITY_Id_Functionality`) VALUES
	    (contractId,(select Id_Functionality FROM TGSI_FUNCTIONALITY WHERE Code like 'SCENARIO'));
  END IF;

  select contractId;

  select scenarioLabel;
  select scenario;

  select Id_Scenario into scenarioId FROM TGSI_SCENARIO as ts
      WHERE ts.CONTRACT_Id_Contract=contractId 
        AND ts.Label like scenarioLabel
        AND ts.Content like scenario;

  select scenarioId;

  IF scenarioId IS NULL
    THEN  
      INSERT IGNORE INTO `TGSI_SCENARIO` (`Date_Of_Creation`, `Label`, `Content`,`CONTRACT_Id_Contract`) VALUES
        (now(), scenarioLabel, scenario, contractId);
      SELECT LAST_INSERT_ID() INTO scenarioId; 
  END IF;

  select scenarioId;

  INSERT IGNORE INTO `TGSI_ACT` (`Begin_Date`,`End_Date`, `Status`, `CONTRACT_Id_Contract`, `SCOPE_Id_Scope`) VALUES
      (now(),now(), 'COMPLETED', contractId, (select Id_Scope FROM TGSI_SCOPE WHERE Code like 'SCENARIO'));

  SELECT LAST_INSERT_ID() INTO actId; 

  select actId;
  
  INSERT IGNORE INTO `TGSI_ACT_AUDIT` (`ACT_Id_Act`,`AUDIT_Id_Audit`) VALUES
      (actId, auditId);
  
END  |
delimiter ;Build step 'Asqatasun Runner' changed build result to SUCCESS
Finished: SUCCESS

Ce n’est pas normal. Logiquement tu devrais obtenir dans Asqatasun quelques choses comme cela :


Je ne suis pas sure à 100% d’avoir atteint cette étape lors de la mise à jour de la documentation.


La documentation pour la configuration du plugin Jenkins donnent quelques informations à ne pas louper. En particulier l’obligation d’utiliser un compte Asqatasun valide, mais de mémoire tu avais déjà vérifié ce point.

Une vérification en DB me semble nécessaire. Il faudrait regarder quelques tables (basé sur le log jenkins que tu as fourni) suite à un build sur Jenkins, voir juste après le 1er build :

  • TGSI_USER
  • TGSI_CONTRACT
  • TGSI_CONTRACT_REFERENTIAL
  • TGSI_CONTRACT_FUNCTIONALITY
  • TGSI_SCENARIO
  • TGSI_ACT
  • TGSI_ACT_AUDIT

@mfaure, @koj, il nous faudrait un truc (docker, ansible, …) pour lancer une installation complète (Asqatasun, Runner, Jenkins, plugins, …) afin de déboguer rapidement ce genre de problème.

Asqatasun CLI ne fait pas grand-chose. Si un audit de scénario fonctionne dans la webapp, il doit fonctionner à l’identique via Asqatasun-CLI ou le plugin Jenkins. Sinon, c’est un bug qu’il faudrait reproduire pour identifier le problème.

Dans le log de MySQL, j’ai une erreur de connection à la base.

2017-08-07T09:10:44.354438Z 13 [Note] Aborted connection 13 to db: 'asqatasun' user: 'asqatasun' host: 'localhost' (Got an error reading communication packets)
2017-08-07T09:10:44.354693Z 12 [Note] Aborted connection 12 to db: 'asqatasun' user: 'asqatasun' host: 'localhost' (Got an error reading communication packets)

@fabrice

Edit :

J’ai réinstallé Asqatasun sous Ubuntu 14.04.5. Ça a marché nickel. :slight_smile:
Donc tout ce que j’ai eu s’agit un problème de compatibilité avec MySQL 5.7 (config ou même au niveau connecteur java).

merci @solael pour le retour.
Si tu as un moment pour créer une issue sur Github, avec les détails de la configuration qui a posé problème, ce serait top.

Issue crée sur Girhub : https://github.com/Asqatasun/Asqatasun/issues/167

1 Like