Minimal-App auf Basis von Spark-Java für Exerimente auf der Cloud.
Features:
- Spark-Java Applikation
- RESTful Service, welcher das Tagesmenu des Restaurants Viadukt parst, basierend auf jsoup
- Simples GUI basierend auf Freemaker Templating Engine und Bootstrap 4
- s2i builds basierend auf fabric8-maven-plugin
- s2i source build in OpenShift über github WebHook getriggert
- Cloud-basierte Entwicklung in eclipse che
- (WIP) Hauptkontroller in Kotlin
Ziel:
- minimale Applikation
- ausprobieren der verschiedenen s2i Mechanismen mit OpenShift
Installiert auf minishift oder einem beliebigen OpenShift-Cluster.
basierend auf dem Plugin, fast-zero-conf-Methode: fabric8-maven-plugin und dem java-exec generator-Plugin:
cf Java Applications Generator
Beide Methoden benötigen einen laufenden OpenShift Cluster und die oc Kommandozeilen-Tools, inkl. eines gültigen oc login
Binary-build (mvn zu java jar) geschieht local mit maven - das binary wird dann zu OpenShift geschickt (daher der Name).
oc login https://192.168.42.xxx:8443 --token=<hidden>
oc new-project thespark
oc projects
oc project thespark
mvn package fabric8:resource fabric8:build fabric8:deploy
mvn -Dmaven.test.skip=true package fabric8:resource fabric8:build fabric8:deploy
Alles wieder löschen:
oc delete all --selector app=hallospark
Build (mvn zu java jar) geschieht ab source direkt in OpenShift (mit builder image und maven etc.) (mit bitbucket-secret, vorhher anlegen...)
oc new-project viadukt
oc new-app fabric8/s2i-java~git@github.com:rschumm/hallospark.git
optional: --source-secret='git-rs'
Bem.: Secret speichern mit oc get secret gitlab-hallospark -o yaml und laden mit oc apply -f ... oder von Hand vorher erstellen.
Bem.: die Files in src/main/fabric8 sind nicht nötig - templates für weitere Config.
Bem.: die Route für den Dienst wird nicht durch den Generator erstell und muss von Hand nachgeliefert werden, bzw. mit: oc expose svc hallospark
da der Build ab source direkt im OpenShift passiert, kann der Build über einen git WebHook gestartet werden. Dazu kann im "Build" hallospark unter "Configuration" der Webhook für github ausgelesen werden. Der kann dann in in github registriert werden.
Bem.: das klappt nur für OpenShift Cluster, die im öffentlichen Netz erreichbar sind (bzw. vom github-Server aus o.ä.)
Bem.: wenn OpenShift keine gültigen Zertifikate hat, muss die SSL-Verifikation beim github-Webhook ausgeschaltet werden.
Laden der Pipeline bc mit oc apply -f .../pipeline_bc.yml - der Projektname (namespace etc.) muss evtl. angepasst werden. $
(Quelle:)
Speichern der Pipeline aus dem Beispiel (jetzt obsolet): oc get bc sample-pipeline -o yaml.
Das Jenkinsfile kann auch im git referenziert werden, anstatt es hier einzubetten.
Tutorial in der Doku
Weitere Doku:
Sobald Openshift eine BC mit Pipeline hat, wird Jenkins provisionniert.
Einfachstes Blueprint für Multi-Stage Deployment mit Jenkins-Build-Pipeline
- Jeder Stage ist ein eigenes OpenShift-Projekt im gleichen Cluster.
- Das Hauptprojekt hat als einziges eine Build-Configuration, z.B. eine s2i, welche wie oben beschrieben generiert wird.
- Das Hauptprojekt hat eine Jenkins-Build-Pipeline - sobald eine Build-Pipeline da ist, wird OpenShift automatisch einen Jenkins provisionieren.
- Die Build-Pipeline wird als normale Resource über ein
.ymlFile geladen. Das Jenkinsfile kann referenziert werden. - Die Build-Configuration buildet ein image, welches in ein Image-Stream mit Tag
:latestgepushed wird. - Die Deployment-Configuration des
devStages ist auf:latestabonniert. - Der Build-Step
deploy to prodsetzt mitoc tagauf den:latestTag den Tag:prod - Die Deployment-Configuration des
prodStages wird von Hand mit "deploy image" erstellt. - Die Deployment-Configuration des
prodStages ist auf:prodabonniert.
prod-Tag manuell setzen:
oc tag sparkpipe/hallospark:latest sparkpipe/hallospark:prod
auf minishift ist eclipse che als addon mitgeliefert: minishift addons apply che
- in Profile -> Preferences -> SSH -> VCS einen SSH Key für
github.como.ä. generieren und dort als Key authentisieren. - neues che-Projekt erstellen mit dem Java-Profil
- neue run-Command mit "Command line":
java -jar ${current.project.path}/target/hallospark-0.0.1-SNAPSHOT.jaro.ä.. und "Preview URL"${server.tomcat8}welcher dann auf dem Entwickler-Maschine-Pod den Port 8080 exposed.
Bem.: ab und zu hat die maven-jvm zu wenig RAM für den Build.
Über einen mvn-Build und der neuen run-Command kann die Applikation gebuildet und im Entwicklungs-Container angeschaut werden.
Ein git-push löst einen Build im OpenShift Projekt aus.
alternative Run-commands:
maven build:
mvn verify -f ${current.project.path}
java build:
cd ${current.project.path}
javac -classpath ${project.java.classpath} -sourcepath ${project.java.sourcepath} -d ${project.java.output.dir} src/main/java/ch/schumm/hallospark/Main.java
java -classpath ${project.java.classpath}${project.java.output.dir} ch.schumm.hallospark.Main
artefact run:
java -jar ${current.project.path}/target/hallospark-0.0.1-SNAPSHOT.jar
artefact run:
java -jar target/hallospark-0.0.1-SNAPSHOT.jar
Here is a simple flow chart:
classDiagram;
FuzzyModel ..> WunderListener;