Ausrollen von Paketen mit Jenkins und der Cloud-Lösung CenterDevice

2 Kommentare

Manchmal gibt es Projekte, in denen man nicht die Hoheit über das Produktivsystem des Kunden hat, man also nicht selbständig neue Versionen vollautomatisiert vom Build bis ins Produktivsystem bringen kann. Man muss also einen Weg finden, dem Kunden die neuesten Versionen zur Verfügung zu stellen, ohne dass die Pakete für jedermann zugänglich sind und dennoch gut versioniert werden können. Trotzdem soll natürlich die Sicherheit der Dateien gewährleistet werden.

In einem Kundenprojekt bin ich kürzlich auf diese Situation gestoßen. Abgeschlossenes Produktivsystem, Pakete müssen manuell auf einem Share abgelegt und damit dem Kunden zur Verfügung gestellt werden.

CenterDevice als Share zum Kunden

CenterDevice ist ein Cloud-basiertes, professionelles Dokumentenmanagement- und Online-Collaboration-System, dessen Fokus unter anderem auf dem Teilen von Dokumenten liegt.
Dokumente können über Schlagworte und Sammlungen strukturiert werden, und über die Volltextsuche lässt sich jede Datei schnell wiederfinden. Weitere Details finden Sie hier.

Wir haben uns als Austauschplatform für CenterDevice entschieden, da es mittels öffentlicher Links einen einfachen Weg bietet, die Pakete dem Kunden zur Verfügung zu stellen. Außerdem sind alle Dateien versioniert, sodass auch auf ältere Pakete ohne Probleme zugegriffen werden kann. Der Kunde selbst benötigt dazu keinen eigenen Account.

Jenkins Publisher Plugin nach CenterDevice

Um dennoch einen automatisierten Veröffentlichungsprozess sicherzustellen, fehlt nur noch ein Jenkins Plugin, dass die Pakete in CenterDevice ablegt und auch gleich entsprechend freigibt.

Use Cases

  • Upload beliebiger Dateien nach einem Build nach CenterDevice
  • Upload einzelner Dateien als neue Version bestehender Dateien
  • Sammlungen vergeben, um Pakete eines Produkts zu gruppieren
  • Dateien in Ordner verschieben. Ordner bieten eine weitere Gruppierungsfunktionalität.
  • Öffentlichen Link erzeugen

Konfiguration

Für die Demo wird folgendes benötigt:

  1. Jenkins Installation
  2. Ein Freestyle Job mit einem Batch-Build-Schritt:
    del release.txt
    time /t > release.txt
    date /t >> release.txt
    echo Changelog >> release_notes.txt
  3. Diese Jenkins Plugins:

Nach der Installation des CenterDevice-Plugins muss zunächst ein API RefreshToken in der Systemkonfiguration hinterlegt werden.

Systemkonfiguration

Das Token kann mit einem Tool erzeugt werden. Es wird dafür ein CenterDevice Account benötigt.

Token Jenkins

In unserem Job kann das Plugin nun als Post-Build-Schritt hinzugefügt werden

Postbuild

Der eigentliche Upload-Step sieht nun so aus:

config jenkins

Folgende Optionen können gewählt werden:

  1. Hochzuladene Dateien: Dies ist ein Ant Filepattern, dass die hochzuladenen Dateien beschreibt. Die Dateien werden als neue Dateien in CenterDevice angelegt.
  2. Hochladen als Latest-Version: Diese Option erlaubt es, eine Datei als neue Version einer vorhandenen Datei hochzuladen. Das Pattern „Hochzuladene Dateien“ darf dazu nur genau eine Datei beschreiben. Existiert die Datei noch nicht, wird eine erste neue angelegt.
  3. Name des Dokuments: Der Name des Dokuments, als dessen neue Version die Datei hochgeladen werden soll.
  4. Öffentliche Links erzeugen: Bestimmt, ob für alle hochgeladenen Dateien ein öffentlicher Link erzeugt werden soll.
  5. Öffentliche Links als Variable ‚publiclinks‘ in die Datei ‚publiclinks.prop‘ schreiben: Bestimmt, dass alle öffentlichen Links in eine properties Datei geschrieben werden, damit diese über das EnvInject dem Build zu Verfügung gestellt werden können (siehe unten).
  6. Sammlung: Eine Sammlung, in die die Datei eingefügt werden soll.
  7. Ordner: Ein Ordner Pfad in der Sammlung. Geschachtelte Order werden durch Backslash getrennt.

Post-Build-Schritte

config jenkins

Datei hochladen mit Sammlung und Ordner

 

config jenkins

Upload neue Version, öffentlicher Link und geschachtelte Ordner

 

Mit dieser Konfiguration werden bereits 2 Dateien nach CenterDevice hochgeladen, für Changelog.txt wird zudem ein öffentlicher Link erzeugt.

Öffentliche Links als Job-Variable

Bislang muss man also noch immer manuell eingreifen, um den öffentlichen Link herauszufinden.
Wäre es da nicht schön, wenn das System uns diesen anzeigen würde?

Dazu nutzen wir das Feature „Öffentliche Links als Variable bereitstellen“. Dies erzeugt nach dem Hochladen die nötigen Links und schreibt diese in eine Properties-Datei „publiclinks.prop“. Die Variable heißt dann publiclinks. Mit EnvInject können wir diese Datei laden, um die Variable auch verwenden zu können. Damit dies auch als Post-Build-Schritt klappt, verwenden wir das Flexible Publish Plugin (enthalten im Any Build Step Plugin).

Da potenziell mehrere Links auf diese Weise importiert werden können, werden diese in HTML Absätze verpackt (<p> Tag). Auf diese Weise lässt sich die Variable dann direkt als HTML Inhalt in Emails verwenden.

CenterDevice Jenkins

Als Demo lassen wir uns abschließend den Link in das Build-Log ausgeben. Dies machen wir als Batch-Datei (ebenfalls über Flexible Publish): @echo %PUBLICLINKS%

Das Ergebnis kann sich bereits sehen lassen.

Start publishing files matching 'release.txt' on CenterDevice in collection 'deployment' and folder 'Demo'
Login successful
Searching for collection >deployment<
Found collection >deployment< with id >8ace477b-55be-445f-91b2-cc07be41b7a6<
Searching for folder >Demo<
Found final folder with name >Demo< and id >ca70972c-2c44-441b-a275-cca3b5604fc5<
Uploading file C:\Program Files (x86)\Jenkins\workspace\CenterDevice Publisher Demo\release.txt as release.txt
Start publishing files matching 'release_*' on CenterDevice in collection 'deployment' and folder 'Demo\changelog'
Login successful
Searching for collection >deployment<
Found collection >deployment< with id >8ace477b-55be-445f-91b2-cc07be41b7a6<
Searching for folder >Demo\changelog<
Found final folder with name >changelog< and id >fe4a7865-8671-439f-a70d-9238d2ff6aea<
Retrieving public link for file >Changelog.txt< with id >d37a0a26-df08-4479-868d-fc26355b019f<
Run condition [Always] enabling perform for step [[Inject environment variables, Windows Batch-Datei ausführen]]
[EnvInject] - Injecting environment variables from a build step.
[EnvInject] - Injecting as environment variables the properties file path 'publiclinks.prop'
[EnvInject] - Variables injected successfully.
[CenterDevice Publisher Demo] $ cmd /c call C:\WINDOWS\TEMP\jenkins750722257213274980.bat
Changelog.txt: <p>https://mantest.centerdevice.de:8443/centerdevice-public-link-client/4f09029b-fcb5-43db-b22b-47ab8f3293a6</p>
Changelog

Changelog.txt mit neuer Version

 

Multiple release.txt Dateien

Zusammenfassung

Wir haben nun also ein automatisiertes Verfahren zum Veröffentlichen von Paketen in CenterDevice und dem Zustellen von Links zum Download durch den Kunden.
Auch wenn wir hier den Link nur im Build-Log ausgegeben haben, wäre es natürlich möglich eine Mail mit den Links zu versenden. Das überlasse ich aber dem Leser.

Die aktuelleste Version (1.0.4) des Plugins finden Sie hier.

Oliver Daum

Oliver Daum hat sich auf den Bereich .Net und WPF spezialisiert und entwickelt auf dessen Grundlage maßgeschneiderte Lösungen für Kunden in ganz Deutschland.
Darüber hinaus ist er Kofax Certified Capture Consultant und entwirft Systeme auf Basis von Kofax Capture.

Share on FacebookGoogle+Share on LinkedInTweet about this on TwitterShare on RedditDigg thisShare on StumbleUpon

Kommentare

  • Andreas Ebbert-Karroum

    28. September 2017 von Andreas Ebbert-Karroum

    Sehr schöne Integration!

    Eine Frage zu den öffentlichen Links: Werden diese immer neu generiert, oder bleibt der bereits bestehende Link erhalten? Dieser verweist ja automatisch immer auf die aktuellste Version. Dann bräuchte sich der Kunde nur einmal den Link zu speichern, und kann darüber immer auf die aktuellste Version zugreifen.

    Beste Grüße,
    Andreas

    • Oliver Daum

      28. September 2017 von Oliver Daum

      Sofern es bereits einen öffentlichen Link gibt, bleibt dieser erhalten und wird ausgelesen, um ihn in die publiclinks.prop zu speichern.

      VG, Oliver

Kommentieren

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.