matthiasforberg
Occasional Collector

Projekt per Kommandozeile importieren?

Jump to solution

Hallo,

ein Kollege spielt grad etwas mit "Docker" rum und kann damit eine komplette FS-Serverumgebung kapseln. Jetzt war die Frage, ob man auf Basis der Kommandozeile ein beliebigen Projektexport importieren kann?! Das könnte man z.B. nutzen, um schnell einen Showcase für bestimmte Projekte aufzusetzen oder auch für die schnelle Erstellung von Testumgebungen (Migrationstests etc.).

Ich gehe davon aus, dass man alles, was man manuell im ServerManager auswählen kann auch irgendwie scripten kann, schätze aber, dass es mehr als ein Dreizeiler wird. Kann man es möglicherweise direkt über die (Linux-)Shell machen, z.B. über einen Installer oder sowas? Oder muss man sich auf jeden Fall mit dem Server verbinden und dann über die API gehen? Gibt es da Erfahrungen, wie man am besten vorgeht oder gar Hilfsmittel, die den automatisierten Import vereinfachen? Jeder Tipp wird gerne genommen. Danke!

Grüße

Matthias

0 Kudos
1 Solution

Accepted Solutions
marro
Crownpeak employee

Hallo Matthias,

Du wirst nicht drumrum kommen, ein kleines Tool zu schreiben, welches sich mit dem Server verbindet und den Projektimport dann über die API vornimmt. Wird zwar kein Dreizeiler, aber auch nicht viel mehr. 😉 In unseren Abteilungen gehen wir in den automatisierten Tests denselben Weg.

Viele Grüße

Donato

View solution in original post

0 Kudos
5 Replies
marro
Crownpeak employee

Hallo Matthias,

Du wirst nicht drumrum kommen, ein kleines Tool zu schreiben, welches sich mit dem Server verbindet und den Projektimport dann über die API vornimmt. Wird zwar kein Dreizeiler, aber auch nicht viel mehr. 😉 In unseren Abteilungen gehen wir in den automatisierten Tests denselben Weg.

Viele Grüße

Donato

0 Kudos

Hallo Matthias,

benötigst du noch weitere Hilfe oder hat dir Donatos Antwort bereits geholfen? In diesem Fall wäre es toll, wenn du seine "richtige Antwort" entsprechend markierst.

Solltest du zwischenzeitlich eine eigene Lösung gefunden haben, wäre es super, wenn du diese hier bereitstellst.


Viele Grüße

Michaela

0 Kudos

Hallo zusammen,

bin bei der Suche nach 'Docker' auf diesen Thread gestoßen und hoffe, dass ich den reaktivieren darf. Habe auch zig FirstSpirit-Instanzen in Docker-Containern laufen und will nun noch den Projektimport, die Installation von Modulen, das Einspielen von templates usw. automatisieren. Der Projektimport (des Mithras 2.0 Projekts) in FS 5.2.311 (andere Versionen habe ich nicht probiert) scheitert mit einer NPE, wenn ich das über die API durchführe:

12.02.2016 10:54:45.910 Converting schedule entry 'generate partly' (old id = 21364, new id = 11384)

12.02.2016 10:54:45.910 Converting schedule entry 'Full Deployment' (old id = 21365, new id = 11385)

12.02.2016 10:54:45.911 Converting schedule entry 'generate full' (old id = 21366, new id = 11386)

12.02.2016 10:54:45.911 Converting schedule entry 'Delta Deployment' (old id = 21360, new id = 11387)

12.02.2016 10:54:45.911 Converting schedule entry 'Repair references' (old id = 21361, new id = 11388)

12.02.2016 10:54:45.911 Converting schedule entry 'Teildeployment' (old id = 21362, new id = 11389)

12.02.2016 10:54:45.911 Converting schedule entry 'Rebuild search index' (old id = 21363, new id = 11390)

12.02.2016 10:54:45.914 Importing schedule storage

12.02.2016 10:54:45.921 Importing schedule storage

12.02.2016 10:54:45.922 Importing schedule storage

12.02.2016 10:54:45.922 Importing schedule statistics

12.02.2016 10:54:45.923 Importing schedule task templates

12.02.2016 10:54:45.924 Error importing project CMO Mithras 2.0 - java.lang.NullPointerException

12.02.2016 10:54:45.924 FSVersion=5.2.311.72449#4587;JDK=1.8.0_72 64bit Oracle Corporation;OS=Linux 3.16.7-29-desktop amd64;Date=12.02.2016 10:54:45

java.lang.NullPointerException

        at de.espirit.firstspirit.server.export.importhandler.ScheduleImportHandler$Helper.importScheduleTaskTemplates(ScheduleImportHandler.java:101)

        at de.espirit.firstspirit.server.export.importhandler.ScheduleImportHandler.transfer(ScheduleImportHandler.java:63)

        at de.espirit.firstspirit.server.export.ProjectImporter.call(ProjectImporter.java:396)

        at de.espirit.firstspirit.server.export.ProjectImporter.call(ProjectImporter.java:66)

        at de.espirit.firstspirit.server.action.ServerActionManagerImpl$ServerActionCallableWrapper.call(ServerActionManagerImpl.java:415)

        at de.espirit.firstspirit.server.action.ServerActionManagerImpl$ServerActionCallableWrapper.call(ServerActionManagerImpl.java:396)

        at de.espirit.firstspirit.server.ExecutionManagerImpl$ExtendedCallable.call(ExecutionManagerImpl.java:600)

        at java.util.concurrent.FutureTask.run(FutureTask.java:266)

        at de.espirit.common.util.BoundedExecutorService$RunnableWrapper.run(BoundedExecutorService.java:436)

        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)

        at java.util.concurrent.FutureTask.run(FutureTask.java:266)

        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

        at java.lang.Thread.run(Thread.java:745)

        at de.espirit.common.util.SuspendableThread.run(SuspendableThread.java:55)

Der Code:

...

            upload = projectStorage.uploadExportFile(exportFile.getName(), fis);

            if (upload != null) {

                ProjectInfo projectInfo = projectStorage.getProjectInfo(upload);

                Map<String, String> layerMapping = new HashMap<String, String>();

                String layerName = "";

                for (final Properties property : projectInfo.getUsedLayers()) {

                    layerName = property.getProperty("name");

                    layerMapping.put(layerName, null);

                }

                ImportParameters importParams = new ImportParameters(upload, projectInfo, projectName, projectDescription, layerMapping, new HashMap<Long, Long>());

                importParams.setActivateDeployments(true);

                importParams.setActivateProject(true);

                ServerActionHandle<ImportProgress, Boolean> importHandle = projectStorage.startImport(importParams);

Ich hoffe, mir kann jemand eine Idee vermitteln, ob in unserem Code was fehlt oder was sonst die Ursache der NPE sein könnte.

Danke. Heiko

0 Kudos

Hallo Heiko,

kannst du bitte ein neues Posting eröffnen und lediglich auf diesen Thread verweisen?

Dieser Thread taucht in unserer Ansicht unbeantworteter Postings nicht mehr auf und wird daher unter Umständen untergehen.

Ein neu erstelltes Posting erscheint jedoch immer in der Ansicht.

Danke im Voraus und viele Grüße

Michaela

0 Kudos

Hallo Michaela,

danke für den Hinweis. Ich konnte das Problem mit der NPE durch "Nachdenken" umschiffen, indem ich Mappings für die im Export enthaltenen ScheduleTaskTemplates setze:

...

List<ScheduleTaskTemplateDTO> scheduleTaskTemplates = projectInfo.getServerScheduleTaskTemplates();

Map<Long, Long> scheduleTaskTemplateMapping = new HashMap<Long, Long>();

for (ScheduleTaskTemplateDTO scheduleTaskTemplate : scheduleTaskTemplates) {

    scheduleTaskTemplateMapping.put(Long.valueOf(scheduleTaskTemplate.getId()), -1L);

}

ImportParameters importParams = new ImportParameters(upload, projectInfo, projectName, projectDescription, layerMapping,

                        scheduleTaskTemplateMapping);

Vielleicht guckt sich das jemand an und sagt mir, ob es nicht nur funktioniert, sondern auch richtig so ist.

Die NPE würde ich ja gern als Bug sehen, aber ohne hätte ich wahrscheinlich gar nicht mitbekommen, dass da was nicht importiert wird. Eine entsprechende Fehlermeldung/Exception wäre natürlich trotzdem gut.

Einen extra Thread mach' ich jetzt nicht auf, wollte meine Lösung nur noch hier dokumentieren.

Beste Grüße,

Heiko

0 Kudos