Java Applikation baut andere Java Applikation

  • Anzahl Processe 4

    1. Mehrer Processe. Jeden Command einzeln ausführen (3) 75%
    2. Ein Process. Commands in eine .sh Datei schreiben. (1) 25%

    Ich brauche einen Command zum clone und um checkout und dann kommen die Maven Command dazu, zur Sicherheit mache ich den "clean" command und dann den build command "package" dann muss ich die fertige jar nur noch weiter kopieren. Ich muss, dann aber die Ausgabe der Process verarbeiten, um eventuell aufgetretene Fehler zu erkennen.

    Was denkt ihr?

  • Also wenn es nur um "git clone", "git pull" und "mvn clean package" geht, dann kannst du dafür easy ein Shell Script basteln. Was die Verarbeitung der Ausgabe angeht, kommt es darauf an was du wissen willst. Wenn du nur wissen willst ob es fehlgeschlagen ist oder nicht, dann kannst du dafür den Exit Code nutzen ($?). Ist der Code != 0 gab's ein Problem.


    Edit: Den Exit code kannst du dann auch bei git nutzen um festzustellen ob irgendwas fehlgeschlagen ist.

  • Ich habe den bash code jetzt so geschrieben,


    Shell-Script: build.sh
    1. git clone {GitUrl}
    2. git checkout {Branch}
    3. git pull
    4. cd {GitName}
    5. mvn clean
    6. mvn package
    7. mkdir ../build
    8. mv target/*jar ../build/
    9. exit $?

    Wenn ihr Verbesserungen habt gerne her damit.

    Mit freundlichen Grüßen

    AgentSlim | Marvin R.


    Twitter | E-Mail


    Buy Me A Coffee

    Einmal editiert, zuletzt von AgentSlim () aus folgendem Grund: Git Checkout & Git Pull hinzugefügt

  • Wenn du immer wieder neu git clone verwendest würde ich es wie folgt machen:

    git clone --depth=1 --single-branch --branch {Branch} {GitUrl}


    git checkout und git pull benötigst du dann nicht mehr.

    Durch --depth=1 werden wirklich nur die benötigten Datein gecloned.

    Hier vielleicht nochmal zu nachlesen: https://linuxhint.com/git-shallow-clone-and-clone-depth/

  • Mach noch nen Shebang am Anfang rein (#!/bin/bash). Zusätzlich kannst du die goals bei Maven kombinieren (in deinem Fall mvn clean package).


    Die Sache ist jetzt noch, dass dein Skript keine Fehlererkennung hat und so wie es aktuell aufgebaut ist, wird es bei einem Fehler einfach weiter arbeiten. Das fängt z.B. damit an, dass du klonst und direkt danach den Branch wechseln willst. Was aber nicht funktionieren wird, da du erst nach checkout und pull in das Verzeichnis der Repo wechselst. Letzteres löst sich jedoch durch den Tipp von DevTek .


    Was die Fehlererkennung betrifft. Sowas ist wichtig. Sonst könnte dein Script ungewollte Dinge auslösen. Sagen wir git clone schlägt fehl, weil keine Internetverbindung vorhanden ist. Dadurch würde Checkout, Pull und ChangeDir fehlschalgen. Kritisch ist hier das ChangeDir weil du ja weiter unten Änderungen am Dateisystem mit einem relativen Pfad vornimmst. Da das erste ChangeDir fehlgeschlagen ist, wird das "build" Verzeichnis in dem Parent-Verzeichnis von der working directory des Skripts erstellt. Beim erstellen eines Verzeichnisses ist das nicht großartig schlimm. Wenn es jedoch irgendwann mal ums Löschen geht, dann kann sowas ganz viel Ärger einbringen.


    Ein weiterer Tipp wäre, dass du bei mkdir den -p switch mit reinpackst. Das sorgt dafür, dass wenn das Verzeichnis bereits existiert, kein Fehler ausgegeben wird (https://explainshell.com/explain?cmd=mkdir+-p+tempdir).


    Nun zu der Fehlererkennung: Das exit $? am Ende deines Scripts gibt lediglich den Exit-Code von mv als exit code deines Scriptes aus.



    Das ist jetzt mal eben so hier zusammengeschrieben und nicht getestet. Was ich ebenfalls noch machen würde ist, die ganzen Exit-Code checks in eine eigene Funktion zu schieben, da es doch schon viel doppelter code ist.

  • Danke


    Habe es jetzt so gelöst:


    So kann ich durch ein anderes Skript die Werte eintragen und die shell starten.

  • Die Werte brauchst du nicht in die Skriptdatei eintragen kannst du auch mit Befehlszeilenargumenten machen. $1 ist der erste Parameter, $2 der Zweite usw.


    Shell-Script
    1. #!/bin/bash
    2. Branch=$1
    3. GitUrl=$2
    4. GitName=$3


    Der Befehl wäre dann ./script.sh <branch> <gitUrl> <gitName>