matthiasforberg
Occasional Collector

Timestamp von Deplyomentverzeichnis auslesen?

Jump to solution

Hallo,

ich habe ein Deployment mit Timestamp eingerichtet, etwa so:

cms_deploy.png

Durch den abschließenden Slash wird der Timestamp als eigenes Verzeichnis angehängt, z.B. /opt/www/cms_deploy/_20140124_114302/

Ich einem nachgelagerten Skript möchte ich genau diesen Timestamp auslesen und an einen Service übergeben. Ich habe aber über die API nicht herausgefunden, wie ich an diesen Verzeichnisnamen bzw. Timestamp komme. Mit context.getPath() bekomme ich nur das Generierungsverzeichnis und wenn ich mir über context.getTasks() die Auftragsaktionen hole, kann ich zwar den richtigen finden und den Pfad über task.getTarget().getPath() auslesen, aber eben nur so, wie er eingetragen ist, also ohne Timestamp.

Wie komme ich an diesen Timestamp bzw. den kompletten Deploymentpfad dran?

Danke!

Matthias

0 Kudos
1 Solution

Accepted Solutions
MichaelaReydt
Community Manager

Hallo Matthias,

du könntest versuchen, über den ScheduleContext die Startzeit des (getStartTime()) des Auftrags zu ermitteln. Sollte diese mit dem Timestamp deines Verzeichnisses übereinstimmen, könntest du sie zur weiteren Bearbeitung verwenden.

Eine Möglichkeit zur Ermittlung des Deploymentpfads ist mir ad hoc nicht bekannt.

Viele Grüße

Michaela

View solution in original post

0 Kudos
3 Replies
MichaelaReydt
Community Manager

Hallo Matthias,

du könntest versuchen, über den ScheduleContext die Startzeit des (getStartTime()) des Auftrags zu ermitteln. Sollte diese mit dem Timestamp deines Verzeichnisses übereinstimmen, könntest du sie zur weiteren Bearbeitung verwenden.

Eine Möglichkeit zur Ermittlung des Deploymentpfads ist mir ad hoc nicht bekannt.

Viele Grüße

Michaela

0 Kudos

Hallo Michaela,

soweit ich das beurteilen kann, setzt der Deployment Auftrag die StartTime selbst auf den Zeitpunkt, wenn er startet. Und unmittelbar nach dem Deployment stimmt die Zeit über getStartTime auch nicht mehr mit dem Timestamp des Deployments überein. Ich habe leider keine Ahnung, wie ich da "von außen" auf die Startzeit der Deployment-Aktion dran kommen könnte. Mein Workaround sieht momentan so aus:

1. Generierung

2. Skript set Timestamp

import java.text.SimpleDateFormat;

SimpleDateFormat dateFormat = new SimpleDateFormat( "_yyyyMMdd_HHmmss" );

context.setProperty("timestamp", dateFormat.format(new Date()));

3. Deployment (siehe Screenshot oben)

4. Skript read Timestamp and call REST service

...

String deploy_dir = context.getProperty("timestamp");

...

[REST call]

Aber das kann ja nicht die Lösung sein, weil das setzen des Timestamps ein paar Millisekunden vor dem Start des Deployment passiert, d.h. mit einer Wahrscheinlichkeit von ca. 1:995 hat mein Zeitstempel eine Sekunde weniger als das tatsächliche Deploymentverzeichnis.

Es muss doch irgendeine Möglichkeit geben, an diesen Timestamp zu kommen...?!

Grüße

Matthias

0 Kudos
pavone
I'm new here

Hallo Matthias,

wenn der Auftrag keine parallele Ausführung erlaubt, könntest du vielleicht per Hand alle "Timestamp-Verzeichnisse" in deinem Deploymentverzeichnis auslesen und das Verzeichnis mit dem jüngsten Datum suchen.

Viele Grüße

Tim

0 Kudos