Der Jenkinsslave und die Javaversion

Wie sich mal wieder herausgestellt hat, ist die Javaversion auf einer Windows-Slave-Maschine von großer Bedeutung. Auf einer Windows-Slave-Maschine wollte ich eine Batch-Datei ausführen, die wiederum ein Powershell-Skript aufgerufen hat. Während des Durchlaufs bekam ich jedoch diese Fehlermeldung in Jenkins:

Import-Module : Could not load file or assembly 'file:///C:\Program Files\WindowsPowerShell\Modules\Msonline\1.1.183.17\Microsoft.Online.Administration.Automation.PSModule.dll' or one of its dependencies. An attempt was made to load a program with an incorrect format.

Das seltsame daran war jedoch, dass dieses Skript in der Eingabeaufforderung von Windows auf derselben Maschine ohne Probleme lief. Mit Jenkins bekam ich jedoch diese Fehlermeldung. Wie sich herausgestellt hat, war auf der Slave-Maschine eine x86-Version von Java installiert. Diese habe ich dann deinstalliert und die entsprechende x64-Version installiert. Danach musste man nur noch den Slave-Agenten neu starten und die Fehlermeldung war beim nächsten Bau verschwunden.

Quellen:

findstr Beispiel: Bestimmte Zeilen ausschließen

Manchmal muss man mit Hilfe des Tools findstr bestimmte Zeilen ausschließen aus einer langen Liste von Daten. Dies will ich hier an einem kleinen Beispiel zeigen. Angenommen, man hat eine Liste an Zeilen wie diese hier:

(TR3919) Power '1' has been deployed to version '1'
(TR9102) Power '2' has NOT been deployed to version '2'
Random text and 13773r5, with a big error…
(TR1337) complicated
(TR1239) error

Und nun möchte man alle Zeilen bekommen, die entweder mit (TRXXXX) anfangen (wobei XXXX eine Zahl zwischen 0000 und 9999 sein kann) oder die ein error enthalten. Zeilen, die ein has been deployed enthalten, sollten rausgefiltert werden. Das kann man mit folgendem Befehl erreichen:

findstr "(TR[0-9][0-9][0-9][0-9]) error" "data1.txt" | findstr /V /C:"has been deployed"

Der erste findstr-Befehl sucht alle Zeilen heraus, die ein (TRXXXX) oder ein error enthalten. Nun muss man noch die Zeilen herausfiltern, die ein has been deployed enthalten und das erreicht man mit Hilfe des zweiten findstr-Befehls.

Der Parameter /V dient dazu, all jene Zeilen zu finden, die den angegeben String nicht enthalten. Der Parameter /C gibt an, dass nach genau diesem String, also Zeichen für Zeichen genau, gesucht wird. Bzw. in diesem Fall soll also genau dieser String nicht dabei sein (eben wegen dem Parameter /V).

docker: Are you trying to mount a directory onto a file (or vice-versa)?

Vor kurzem bekam ich beim Versuch, eine Datei von meinem Windows-Host-System in einen Docker Container über dem -v Parameter zu mounten, diese Fehlermeldung:

docker: Error response from daemon: oci runtime error: container_linux.go:262: starting container process caused : … : Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type.

Mein ursprüngliches Kommando lautete:

docker run -it -v /C/some/path/file.conf:/target/path/file.conf <image_name>

Die Lösung für dieses Problem ist folgende:

  • Erstmal den Container löschen, den ich versucht hatte zu starten: docker rm -f
  • Dockereinstellungen starten (in diesem Fall mit der rechten Maustaste über die Symbolleiste)
  • In dem Fenster mit den Dockereinstellungen auf den Reiter “Shared Drives” wechseln
  • In dem Fenster auf “Reset credentials” drücken
  • Die entsprechende Festplatte wieder aktivieren (in diesem Fall C:)
  • Auf “Apply” drücken und das Fenter schließen
  • Den Dockerdienst neu starten
  • Den docker-Befehl nochmals ausführen.

Quellen

https://stackoverflow.com/questions/45972812/are-you-trying-to-mount-a-directory-onto-a-file-or-vice-versa