Gepardec / Hogarama

Home and Garden Automation
GNU General Public License v3.0
16 stars 8 forks source link

Simplify Hogajama Build Prozess #413

Open ErhardSiegl opened 2 years ago

ErhardSiegl commented 2 years ago

Verbesserung des Hogajama Build-Prozesses.

Rahmenbedingung: Soll in kleinen Schritten möglich sein. Teile können in Sub-Issues implementiert werden. Abgrenzung: Nur Hogajama, nicht andere Komponenten wie Kafka oder Couchbase.

Status

Derzeit haben wir folgende Build-Configs:

  1. s2i-builder-maven: Baut das s2i Builder Image von https://github.com/Gepardec/openshift-builder-maven
  2. hogajama-binary: Kompiliert Hogajama mit dem s2i Builder Image. Generiert Deployment Artefakte in einem Build-Image
  3. hogajama-run: Erzeugt eine WildFly Instanz mit einem WildFly Base Image und dem Build-Image

Das erzeugte WildFy Image wird von einem EAP-Operator verwendet.

Probleme

Der aktuelle Prozess hat folgende Probleme:

  1. Die Build-Schritte müssen manuell getriggert werden.
  2. Die Maven Artefakte werden immer neu von Maven-Central geladen. Das Gepardec openshift-builder-maven Image unterstützt keine inkrementellen Builds.
  3. Der EAP-Operator bietet keinen erkennbaren Mehrwert.
  4. CLI-Skripts für die lokale EAP-Konfiguration können nicht einfach wiederverwendet werden.
  5. Werden weitere Services installiert wie z.B. Mock-GUI, dann werden die Sourcen neu kompiliert. Das widerspricht dem "Build-Once" Grundsatz von Build-Pipelines
  6. Ändert sich die Kafka-Installation, muss das Zertifikat im Git-Repo eingecheckt und neu gebaut werden.
ErhardSiegl commented 2 years ago

Ein Vorschlag ist, den openshift-builder-maven rauszuwerfen und stattdessen das quay.io/wildfly/wildfly-s2i-jdk11 Image zu verwenden. Unterstützt Incremental Builds. Siehe Hogajama/.s2i/bin/assemble in Branch 413-simplify-hogajama-build-prozess Damit: Erster Build:

$ cd Hogajama
$ s2i build . quay.io/wildfly/wildfly-s2i-jdk11 hogarama-build-artefacts --incremental
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  04:36 min
[INFO] Finished at: 2022-04-24T15:24:36Z
[INFO] ------------------------------------------------------------------------

Zweiter Build:

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  02:08 min
[INFO] Finished at: 2022-04-24T15:29:53Z
[INFO] ------------------------------------------------------------------------

Damit sparen wir uns den ganzen Build s2i-builder-maven, die Wartung von https://github.com/Gepardec/openshift-builder-maven und sparen Zeit und Ressourcen durch den inkrementellen Build.

ErhardSiegl commented 2 years ago

Erster Build am Server:

[INFO] Building war: /tmp/src/target/hogajama-rs-0.0.1-SNAPSHOT.war
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for hogajama 0.0.1-SNAPSHOT:
[INFO] 
[INFO] hogajama ........................................... SUCCESS [  5.593 s]
[INFO] hogajama-domain .................................... SUCCESS [ 48.205 s]
[INFO] hogajama-frontend .................................. SUCCESS [  4.803 s]
[INFO] hogajama-interfaces ................................ SUCCESS [  0.080 s]
[INFO] hogajama-interfaces-frontend ....................... SUCCESS [ 13.407 s]
[INFO] hogajama-interfaces-rs ............................. SUCCESS [  3.791 s]
[INFO] raspberry-pi-mocks ................................. SUCCESS [  0.012 s]
[INFO] raspberry-pi-mocks-cli ............................. SUCCESS [ 25.693 s]
[INFO] hogajama-services .................................. SUCCESS [  8.109 s]
[INFO] raspberry-pi-mocks-gui ............................. SUCCESS [02:05 min]
[INFO] hogajama-angular-frontend .......................... SUCCESS [06:45 min]
[INFO] hogajama-rs ........................................ SUCCESS [ 27.757 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  11:11 min
[INFO] Finished at: 2022-04-26T15:42:52Z
[INFO] ------------------------------------------------------------------------

Zweiter Build:

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for hogajama 0.0.1-SNAPSHOT:
[INFO] 
[INFO] hogajama ........................................... SUCCESS [  2.402 s]
[INFO] hogajama-domain .................................... SUCCESS [ 42.394 s]
[INFO] hogajama-frontend .................................. SUCCESS [  5.431 s]
[INFO] hogajama-interfaces ................................ SUCCESS [  0.078 s]
[INFO] hogajama-interfaces-frontend ....................... SUCCESS [  7.796 s]
[INFO] hogajama-interfaces-rs ............................. SUCCESS [  3.007 s]
[INFO] raspberry-pi-mocks ................................. SUCCESS [  0.008 s]
[INFO] raspberry-pi-mocks-cli ............................. SUCCESS [ 29.123 s]
[INFO] hogajama-services .................................. SUCCESS [  5.307 s]
[INFO] raspberry-pi-mocks-gui ............................. SUCCESS [ 50.541 s]
[INFO] hogajama-angular-frontend .......................... SUCCESS [07:06 min]
[INFO] hogajama-rs ........................................ SUCCESS [ 31.304 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  10:05 min
[INFO] Finished at: 2022-04-26T15:58:54Z
[INFO] ------------------------------------------------------------------------

Nachdem der Angular-Build so lange dauert, bringt der Incremental Build nicht so viel :-(

ErhardSiegl commented 2 years ago

Habe den Vorschlag in https://github.com/Gepardec/Hogarama/tree/413-simplify-hogajama-build-prozess mal ausgearbeitet

MauriceNino commented 2 years ago

Für den Angular Teil wäre eventuell https://yarnpkg.com/features/zero-installs interessant.

ErhardSiegl commented 2 years ago

Für den Angular Teil wäre eventuell https://yarnpkg.com/features/zero-installs interessant.

Einen Versuch ist es sicher wert.