Intégration GIT

Toujours pareil. Version source et destination 5.0.20. Quelle piste je peux creuser encore ?

Merci d’uploader (mais sans l’importer) le ZIP sur cette instance https://name.sandbox.simplicite.io pour que je regarde ça de plus près, le mot de passe designer en MP

NB: sur cette instance j’ai exporté en ZIP et importé la demo sans pb (je suis bien en mode explosé et ça marche avec ou sans les artifacts)

C’est uploadé dans le module name.

J’ai lancé l’import du ZIP:

Il y a des erreurs de paramétrage qui le font finir en “KO” mais la mécanique d’import fonctionne

Alors oui ça fonctionne quand on importe depuis le module, mais l’idée est d’essayer d’importer en passant par l’import de zip via shell (Automatisation) ou via git.

La ça ne fonctionne pas car il manque les modules de paramètrage prérequis.

Via la “mécanique” Git ça fonctionne aussi (localement ou via un git push depuis un clone), j’ai pas testé avec le module “name” mais avec celui de la démo ça marche.

Ce que je n’ai pas encore retesté dans le cas “exploded” c’est l’import via curl sur /io c’est de ça dont on parle quand on dit “import de zip via shell”, je le fais tout de suite

D’accord, de mon coté j’upload et importe le module de paramètrage si le fait de lever les erreurs permet d’identifier le problème.

Je ne comprends pas “si le fait de lever les erreurs permet d’identifier le problème”.

Les erreurs de paramétrage n’ont pas d’importance. Ce qu’on vérifie ici c’est que techniquement ça importe (que l’import soit fonctionnellement OK ou KO c’est pas grave du moment que ça importe).

En tout cas l’import via curl sur I/O fonctionne aussi:

curl -u designer:xxx --form service=moduleimport --form module=Demo --form version=5 --form zip=true --form file=@Demo-5.zip https://name.sandbox.simplicite.io/io

image

Bref, vu de ma fenêtre, tout fonctionne avec un module en mode “exploded” :

  • en import manuel de ZIP via la UI
  • en import manuel depuis le repo Git local via la UI
  • en import via un appel curl sur I/O
  • en import via un push Git depuis un clone externe du repo Git

Si ça marche pas dans votre cas c’est que vous devez faire autre chose qu’il faut me décrire. précisément.

On est bien d’accord que le ZIP que vous fabriquez via vos processus d’automatisation a bien les fichiers/répertoires à la racine comme les ZIP construits par Simplicité ? S’ils sont dans un sous répertoire du ZIP ça ne peut pas marcher et ça peut expliquer un message qui dit qu’il ne trouve rien à importer.

Je viens de tester sur la sandbox avec le zip que je vous ai fourni. l’import xml ne fonctionne pas depuis l’import xml.

Par contre via ligne de commande, ça a l’air de fonctionner. je crois qu’on appelle pas l’import via curl de la même manière que vous. Je vérifie et j’apporte les corrections nécéssaires.

Oulà… la page d’import XML est à proscrire pour les imports de modules.

En effet elle ne gère pas tous les formats d’exports (en particulier pas les exports de module complexes) et, surtout, elle ne gère pas le diff final !

Pour importer un module manuellement depuis un fichier, il faut aller sur le module, uploader le fichier, retirer les éventuels settings qui indiquent un autre emplacement, enregistrer et cliquer sur “Import module”.

D’accord, jusqu’ici on s’en servait a chaque fois qu’on importait un module from scratch, mais dans le cadre de mise à jour de module on passe toujours par le module déja existant.

Je continue à chercher de mon coté la raison du non import, ça vient de notre automatisation c’est certain.

Même pour un import initial il ne faut jamais utiliser cette page pour importer un module (on va rajouter une aide en ligne pour le rappeler car les gens se trompent souvent).

Regardez si le pb dans votre automatisation c’est pas juste que le ZIP que vous fabriquez n’a pas les fichiers à la racine. Par exemple quand on fait un “download as ZIP” depuis GitHub les fichiers du repos sont mis dans un sous répertoire dans le ZIP donc dans un format pas compatible avec les imports Simplicité qui s’attendent à tout avoir à la racine du ZIP

Ok le problème vient de la manière dont on parse le resultat du curl. Le format de retour du curl a changé recement ou du fait qu’on soit au format exploded? Il semblerait qu’on ait une reponse au format JSON `{“status”:“OK”} maintenant.

curl -u $SIMPLICITE_USER:$SIMPLICITE_PASSWORD --form service=zipimport --form file=@module.$PROJECT_VERSION.zip http://simplicite:8080/io | grep status > result
- “echo ‘{"status":"OK"}’ > resultOK”
- cat result

Voilà la manière dont c’est parsé et ça fonctionne.

De mémoire le changement de format de réponse du service I/O a changé il y a déjà longtemps…

Idéalement il faudrait mettre un -s dans le curl pour n’avoir que la réponse et la parser avec l’outil jq (parser JSON en ligne de commande)

Mais il y a un gros pb dans cet appel => service=xmlimport c’est comme la page “Import XML” c’est pas fait pour importer des modules complets mais pour importer des données (et/ou éventuellement des patches de paramétrage en delta)

Cf. la commande indiquée plus haut => pour importer un module il faut impérativement utiliser service=moduleimport :

curl -u designer:xxx \
  --form service=moduleimport \
  --form module=Demo \
  --form version=5 \
  --form zip=true \
  --form file=@Demo-5.zip \
  https://name.sandbox.simplicite.io/io

Y’a il un moyen d’acceder au logs via curl ?

curl -u $SIMPLICITE_USER:$SIMPLICITE_PASSWORD http://simplicite:8080/ui/logs > logs

me renvoit ça

Sign in with simplicite
Sign in with Azure AD
1.0.0

Oui mais pas comme ça.

Il y a un service logs sur I/O:

curl -u designer:xxx --form service=logs https://name.sandbox.simplicite.io/io

De manière générale il ne faut jamais taper sur le endpoint UI (/ui) via curl, ce endpoint ne sert que pour des interactions humaines via un browser.

Les endpoints de “service” sont I/O (/io), API (/api), Git (/git), Maven (/maven), etc.

PS: s’il s’agit de récupérer une log détaillée liée à un import de module, la bonne approche est plutôt de passer --form log=true en plus lors de l’appel curl au service moduleimport

cf. Simplicité® documentation/02-integration/io-commandline

Merci, je voulais juste ajouter une trace pour identifier le problème d’import que je rencontre lors d’un import de test qui se deroule de manière automatique dans notre CI. Ca ressemble a un problème lié au format SQL

EDIT : Ca peut venir du fait que le paramètre
$PROJECT_VERSION que l’on passe, contient 0.3.0-SNAPSHOT


`$ curl -u $SIMPLICITE_USER:$SIMPLICITE_PASSWORD --form service=moduleimport --form module=name_param_tech --form version=$PROJECT_VERSION --form zip=true --form file=@name_param_tech.$PROJECT_VERSION.zip http://[MASKED]:8080/io | jq '.status' > result`

2021-02-18 12:34:15,969 ERROR [com.[MASKED].util.engine.ObjectManager] SIMPLICITE|http://c35264b2a783:8080||ECOREDB001|system|com.[MASKED].util.engine.ObjectManager|create||Error SQL query: Create failed for object Module and row ID = 40 java.sql.SQLDataException: data exception: string data, right truncation; table: M_MODULE column: MDL_VERSION at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source) at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source) at org.hsqldb.jdbc.JDBCPreparedStatement.fetchResult(Unknown Source) at org.hsqldb.jdbc.JDBCPreparedStatement.executeUpdate(Unknown Source) at org.apache.tomcat.dbcp.dbcp2.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:136) at org.apache.tomcat.dbcp.dbcp2.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:136) at com.[MASKED].util.engine.DBAccess.update(DBAccess.java:1495) at com.[MASKED].util.engine.ObjectManager.create(ObjectManager.java:2156) at com.[MASKED].util.ObjectDirect.create(ObjectDirect.java:382) at com.[MASKED].util.ObjectDB.create(ObjectDB.java:1201) at com.[MASKED].util.engine.Interface.importModule(Interface.java:1364) at com.[MASKED].util.IntegrationDirect.importModule(IntegrationDirect.java:409) at com.[MASKED].util.Integration.importModule(Integration.java:811) at com.[MASKED].util.Integration.importModuleZIP(Integration.java:789) at com.[MASKED].webapp.servlets.AbstractIOServlet.doPost(AbstractIOServlet.java:528) at javax.servlet.http.HttpServlet.service(HttpServlet.java:652) at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at com.[MASKED].webapp.filters.RewriteFilter.doFilter(RewriteFilter.java:86) at com.[MASKED].webapp.filters.AbstractFilter.doFilter(AbstractFilter.java:37) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at com.[MASKED].webapp.filters.HTTPHeadersFilter.doFilter(HTTPHeadersFilter.java:39) at com.[MASKED].webapp.filters.AbstractFilter.doFilter(AbstractFilter.java:37) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:188) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) at com.[MASKED].tomcat.valves.APISessionValve.invoke(APISessionValve.java:192) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:887) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1684) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.base/java.lang.Thread.run(Thread.java:832) Caused by: org.hsqldb.HsqlException: data exception: string data, right truncation; table: M_MODULE column: MDL_VERSION at org.hsqldb.error.Error.error(Unknown Source) at org.hsqldb.Table.enforceTypeLimits(Unknown Source) at org.hsqldb.Table.generateAndCheckData(Unknown Source) at org.hsqldb.Table.insertSingleRow(Unknown Source) at org.hsqldb.StatementDML.insertSingleRow(Unknown Source) at org.hsqldb.StatementInsert.getResult(Unknown Source) at org.hsqldb.StatementDMQL.execute(Unknown Source) at org.hsqldb.Session.executeCompiledStatement(Unknown Source) at org.hsqldb.Session.execute(Unknown Source) ... 46 more Caused by: org.hsqldb.HsqlException: data exception: string data, right truncation at org.hsqldb.error.Error.error(Unknown Source) at org.hsqldb.error.Error.error(Unknown Source) at org.hsqldb.types.CharacterType.convertToTypeLimits(Unknown Source) ... 54 more 2021-02-18 12:34:16,106 ERROR [com.[MASKED].util.engine.Interface] SIMPLICITE|http://c35264b2a783:8080||ERROR|[MASKED]|com.[MASKED].util.engine.Interface|importModule||Event: Module: name_param_tech: Error creating module (ERR_SAVE) 2021-02-18 12:34:16,193 INFO [com.[MASKED].webapp.servlets.IOServlet] SIMPLICITE|http://c35264b2a783:8080||INFO|[MASKED]|com.[MASKED].webapp.servlets.IOServlet|doPost||Event: I/O service LOGS...

Vu que ça concerne le MDL_VERSION voilà le contenu du fichier module (pas le package.json)

Je peux vous transmettre l’archive si besoin. Merci en tout cas.

{
  "name":"Module",
  "action":"upsert",
  "data":[{
    "mdl_name":"name_param_tech",
    "mdl_version":"0.3.0",
    "mdl_prefix":"npt",
    "mdl_url":"",
    "mdl_lastupd":"2020-10-05 12:37:19",
    "mdl_comment":"Paramétrages techniques "
  }]
}

Ok c’est lié au fait qu’on passe le SNAPSHOT dans la version clairement, la taille du champ est trop petite. Je vais faire en sorte de virer le SNAPSHOT car dans l’application on s’en fiche un peu c’est surtout utile pour le packaging. Merci