Teil 1 – CI / CD Docker Composer

Nach langer Zeit und einiges an Informationsverarbeitung, hier ein kleiner Beitrag von mir zum Thema Continuous Integration und Continuous Deployment.

Vermutlich weist du um was es sich handelt. Entwickler schreiben auf Ihren lokalen Arbeitsplätzen hervorragende Anwendungen und Features die irgendwann den Weg auf eine Testumgebung finden. Von dort aus geht es in dann meist auf eine Qualitätsumgebung bis es dann schlussendlich in der produktiven Umgebung landet. Da hier in der Vergangenheit viele manuell Schritte nötig waren, die natürlich nicht immer Fehlerfrei durchlaufen wurden, kann das ganze voll automatisch strukturiert werden. Der Vorteil liegt klar auf der Hand, automatische Prozesse machen immer das gleiche und verringern die Fehleranfälligkeit. Zudem spart man viel Zeit, im vergleich zum manuellen Deployment.

Der Workflow sieht dann im Grunde vor, dass die Entwickler wie gewohnt ihren Programmcode in einer Source Verwaltung ( Beispielsweise GIT ) aufbewahren und dort aktualisieren. Von hier aus kann der automatisch Prozess dann auch schon beginnen.

Ein so genannter Build Service, in meinem Fall Jenkins, bekommt die Information das sich in einem überwachten Branch etwas verändert hat. Nun wird der Programmcode aus dem Source Repository gezogen und „gebaut“. Bauen kann in verschiedenen Programmiersprachen natürlich unterschiedlich aussehen. Gehen wir von einer Java Applikation mit Maven aus dann wird nun ein „mvn clean package“ erzeugt. Während dessen laufen die Tests und mit ein wenig Erweiterungen wird ebenfalls die Code Qualität geprüft und die Testabdeckung berechnet. Diese Information können dann zum Beispiel in SonarQube eingesehen werden. Sollte alles passen wird das Packet weiter verarbeitet und landet in der Testumgebung. Hier können dann Integrations Test gefahren werden. Eine Lösung hierfür wäre zum Beispiel Postman. Zudem können noch Last Test gemacht werden, hier bietet sich JMeter an. All diese Tests lassen sich Problemlos automatisiert durchführen. In der Qualitätsumgebung können dann zum beispiel manuell Test gemacht werden oder noch viel besser, automatisierte Acceptance Tests durchgeführt werden. Sollte hier alles wie gewünscht laufen spricht nichts mehr dagegen die neue Version in die Produktive Umgebung zu liefern.

Wie sieht nun meine Lösung aus. Ich habe schon öfters geschrieben das ich meine Umgebung und mein Server komplett auf Docker ausgelegt habe, daher ist es auch für mich nahelegend das meine Integration dieser Schritte ebenso eine Container Lösung benötigt. Daher habe ich ein einfaches docker-compose.yml erstellt das mir die benötigten Services startet. Leider sind noch nicht alle Schritte automatisch hinterlegt aber diese werden noch im Git Repository aktualisiert und mit einer Beispielanwendung optimiert.

version: '2'
services:
jenkins:
image: jenkins/jenkins:lts-alpine
volumes:
- /var/run/docker.sock:/var/run/docker.sock
ports:
- 8088:8080
- 50000:50000
links:
- artifactory
- registry
- repository
- sonar
artifactory:
image: docker.bintray.io/jfrog/artifactory-oss
ports:
- 8081:8081
registry:
image: registry
ports:
- 5000:5000
repository:
image: gitlab/gitlab-ee
ports:
- 443:443
- 8000:80
sonar:
image: sonarqube:alpine
ports:
- 9000:9000
- 9092:9092

Hauptbaustelle ist nun die Docker Nutzung im Jenkins Container. Hier wird bereits der docker.sock gemounted aber funktioniert nicht direkt über den Jenkins User im Jenkins Container. Hierfür sind zwei weitere Schritte nötig.
Einmal muss noch die Docker CLI installiert werden:

apk --update add curl \
&& mkdir -p /tmp/download \
&& curl -L https://download.docker.com/linux/static/stable/x86_64/docker-18.06.0-ce.tgz | tar -xz -C /tmp/download \
&& mv /tmp/download/docker/docker /usr/local/bin/ \
&& rm -rf /tmp/download \
&& apk del curl \
&& rm -rf /var/cache/apk/*

zum anderen die Rechte des Users angepasst werden zum Beispiel über die Gruppe Docker:984 oder chmod docker.sock … das ist dir überlassen wie du das am liebsten löst.

Hierfür werde ich in den nächsten Tagen ein eigenes Dockerfile zur Verfügung stellen, natürlich kannst du das auch selbst realisieren und ein Dockerfile bassierend auf das jenkins/jenkins:lts-alpine oder jenkins/jenkins:lts aufbauen. Ich hab mich für die kleinere Variante mit alpine entschieden aber geht natürlich auch mit ubuntu.

Dieser Artikel dient im Ersten Schritt als eine Einführung und es werden sicher noch weitere Beiträge folgen die dieses Paket abrunden. Das Ziel ist es dieses komplette Environment auf einem Kubernetes Cluster auszurollen und in Jenkins am Ende nur noch Jobs angelegt werden müssen die Bereits mit einem Jenkinsfile im Repository liegen.

//TODO an mich: Ein Video erstellen 🙂

Einfach mit Minecraft

Da ich selbst noch tiefer in die Java Entwicklung einsteigen will und mich weiterbilden möchte habe ich mich dazu entschlossen ein paar Videos zu erstellen die sich mit dem Thema befassen. Da ich aber wenig Zeit habe für größere und komplexe Projekte sollte Minecraft eine ideale Plattform sein um kleinere Projekte zu realisieren.

Das erste Intro Video wurde heute veröffentlicht und Morgen kommt direkt das erste anspruchsvollere Plugin. Demnächst findet ihr dann jeden Freitag eine neue Folge von Einfach mit Minecraft.

This blog has been verified by Rise: Rd6ea1f4b7bbfecd83e1984f03f49ee32

#HackerRank #Challenges 

Ich hab endlich Mal Zeit gefunden mich mit Hacker Rank zu beschäftigen.

In einem Live Stream hab ich versucht ein paar Aufgaben zu lösen. Als Programmiersprache hab ich Java gewählt. Ihr könnt selbst im ersten Video sehen wie es lief.

HackerRank Challenge – A very big sum in Java

Jetzt auch auf Discord: http://discord.gg/E2ar23V

#minecraft meets #discord

Hallo liebe Leserinnen und Leser,

Diesen Abend hab ich damit verbracht dem Minecraft Social Projekt eine neue Anbindung zu verpassen. Ab Heute können Spieler auf dem Minecraft Server mit Leuten im Discord chatten und umgekehrt, beide Text Chats sind synchron mit einander vernetzt.

Ihr könnt das ganze auf dem Minecraft Server von mir ausprobieren
Server: crank.zone
IP: 78.46.48.180
Port: 25565

oder Ihr könnt dem Discord Channel beitreten https://discord.gg/vFp33Rk und seht was auf dem Minecraft Server geschrieben wird und könnt ebenso mit chatten.

Wie das ganze funktioniert?

In Discord gammelt mein Bot der aktuell auf Trello und Bitbucket Aktivitäten wartet. Diese kommen direkt über einen Webhook bei dem Bot an und wird in verschiedene Channel verteilt.  Mittlerweile nutzten sogar schon andere diesen Bot. 🙂

Jetzt kann er auch noch über Webhooks vom Minecraft Plugin zwischen Discord und Server Chat vermitteln.

Macht schon Spaß 🙂

 

Jetzt auch auf Discord: http://discord.gg/E2ar23V

Minecraft Server kurzeitig puschen.

Moin Freunde,

gestern ging der Minecraft Social Server wieder online. Diesmal bleibt er es auch und eine langfristige Finanzierung ist nun endlich gesichert.

Ihr findet ihn unter minecraft.crankdev.de oder server.minecraft-social.de

Nach dem der Server gestern wieder online war hatte ich selbst keine Zeit mich mit Minecraft zu beschäftigen. Dennoch konnte ich heute Morgen mit großer Freude festellen das sich 132 neue Spieler dort eingefunden haben.

Wie geht das?
Das Geheimnis ist ganz Simple. Geht auf die Webseite minecraft-server.Eu und trägt dort euren Server ein. Sobald er aktzeptiert worden ist landet ihr auf der Startseite unter den 5 neusten Servern. In den darauffolgenden Stunden werdet ihr von vielen trollern aber auch neuen Spielern besucht.

Und nun viel Spass beim zocken.
Euer Onko

Besucht auch meinen YouTube und Twitch Channel.

MeetTube Android App Entwicklung auf @livecodingtv

Mal ein paar Worte zur aktuellen Entwicklung von MeetTube. Diese App hatte ich eigentlich für frühstens Ende des Jahres geplant, konnte sie aber aus verschiedenen Gründen jetzt vorziehen.

Die ganze App wird im Live Stream programmiert und das exclusiv auf Livecoding.tv, sicher nicht immer spannend aber man bekommt sehr gute Einblicke und weiß am Ende auch das sie nichts böses enthält 😉 Alle zuschau sind auch herzlich eingeladen an der Gestaltung der App teilzunehmen und Wünsche zu äußern.

Die komplette PlayListe ist hier zu finden.

Minecraft Social auf GitHub.com

Hallo Freunde,

aktuell bin ich zeitlich etwas eingeschränkt, so dass ich nicht wirklich produktiv am Server Plugin weiter schreiben kann. Es würde mich jedoch freuen wenn die investierte Zeit nicht völlig umsonst gewesen wäre. Vielleicht finden sich hier ja ein paar Developer die gern mit mir zusammen das Projekt weiter voran bringen möchten.

Daher habt ihr nun die Möglichkeit das Projekt auf GitHub zu forken und Eure Änderungen und Verbesserungen ein zu bringen. Freu mich auf zahlreiche Pull Request von Euch.

Das Projekt liegt hier: https://github.com/MuellerMH/MinecraftSocial

Gruß
Onko

Docker und Amazon Container Service

Ein Wochenende voller WTF ist vorbei. Themen des Wochenendes waren Dicker, AWS und die blaue Wolke (Cloud) .

Zuerst hab ich viel Zeit verbracht mich intensiver mit Docker zu beschäftigen. Zu allererst Docker Registry: Man logt sich mit Hilfe des Befehls „docker login“ ein und kann nun seine Container ins docker hub schieben. Dazu benutzt man den Befehl „docker push myApp“. Und tada das repository wurde auf docker hub angelegt. Jetzt liegen dort als … Was genau.. die lokal gebauten Container. Blöd nur das zum Beispiel mein railo Container der eine Webseite birgt den Source Code von meinem lokalen Windows Platte gezogen hat. Dieser fehlt nun. Also kein Source Code im Container.

Was nun?

Lesen Lesen Lesen Lesen Lesen wtf Lesen Lesen ahhhh :

Automatisches build repository mit github. Fast schon perfekt. also auf github den Source Code des docker container gepushed. Siehe da alle Infos sind im docker hub inklusive der dockerfile. Was fehlt jetzt immer noch der Source Code. 2 Optionen habe ich nun ohne groß zu Überlegen. Entweder den Code mit in das repository … Pfui … Ein eigenes Repository. Besser, also Code pushen docker File anpassen docker pushen. Start build. Sehr gut so geht’s.

Aber nicht das was mir vorschwebte. Am Rande, ich hab es auch bis jetzt noch nicht erreicht. Ich möchte die Container in AWS laufen lassen über den ACS. Mein Quellcode soll nicht in einem public Repro liegen. Dockerfiles auch nicht. Also Setup für ein Closed Projekt.

Ein weiterer Test den ich gemacht habe war das Docker File aus dem automatmischen repository zu ziehen und den Code als Zipfile von aws S3. Zugriff des S3 nur auf aws Ebene. Wtf build fehlgeschlagen… wtf wo findet der build statt? Etwa Auf docker? -.-

Also nächstes Ziel vielleicht ec2 instance fürs docker. s3 als docker register Speicher. Privates repro des Codes auf github mit public key der ec2.

Die nächsten Tage werde ich wohl hier noch am richtigen Entwurf arbeiten. Sobald das passt geht’s an die API. Wer will schon immer klicken.

Trotzdem Erfolge.

Der Spass darf natürlich nicht fehlen. Also habe ich die ACS mit minecraft getestet. Docker gebaut gepushed eingetragen und tada. Erstmal je Runde daddeln. Config anpassen bungecore dazu packen und 10 Server anschmeißen. Gut 10 laufen manuelles anpassen der ips etc… Ne danke morgen vielleicht 🙂 aber nun kann ich auf 10 Servern zocken.

WTF

Continuous Deployment Mit Docker Containern

Ein neues  Projekt steht an und ich bin schon Feuer und Flamme.

Als Dienstleister im Webbereich hat das Unternehmen in dem ich arbeite einige Produkte die stehts weiter entwickelt werden. Dazu kommen einige Customer Applikationen die einige Schnittpunkte zu Produkten haben jedoch mit vielen speziellen Erweiterungen daher kommen.

Ziel des Projektes ist es die bestehenden Produkte in Docker Container auszulagern. Und diese vom Arbeitsplatz über den Entwicklungsserver auf das Staging auszuliefern und diese dann ins Produktionssystem zu spielen. Wärend der Testserver und Staging Server inHouse Lösungen sind wird ein weiterer Meilenstein sein, das Produktionssystem in die Cloud zu legen.

Das kleinste Problem dürften die in sich geschlossenen Produkte sein, die Herrausvorderung ist das Content Management System. Bis vor kurzen war die Abhängigkeit an die Lokale Produktionsumgebung so tief das ein Auslagern kaum möglich waren. Hier wurden bereits einige Stunden investiert um die Enterprise Version von Abhängigkeiten zu befreien und Cloudfähig zu machen.

Bevor es aber nun los gehen kann müssen zwei Grundlegende Dinge eingeführt werden.

Zum einem die Versionierung.. ja die gibt es nicht so wirklich. Es sind zwar bei einigen Produkten „version“ 2 und 3 vorhanden aber das ist auch nicht mehr als ein Name. es gibt keine Major , Features und Patch Versionen. Dementsprechend auch keine Notes dazu. Zwar Neugikeiten über Änderungen aber alles sehr schwammig.

Zum anderen Unittests. Es gibt zwar einige die für den Entwickler Informationen bereitstellen aber sind nicht wirklich Programmfreundlich gestalltet. Zudem fehlen diese Tests in vielen kritischen Bereich. Ohne diese wird ein automatisches Continouse Deploymend aber ehr ein Ammoklauf.

Weiteres folgt im Laufe der Woche. Einfach dem Block folgen.

Minecraft Plugins Webservice

Lange nichts geschrieben.. also:

Da ich wirklich sehr sehr viel Zeit in die Entwicklung von Minecraft Bukkit Plugins und Bungecore Plugins investiert habe ist es nahe liegend darüber zu schreiben.

Ich fand das es gut wäre Die Spieler auf dem Server zu sehen. Entweder als Android ab oder auf der Webseite des Projektes, in diesem Fall http://minecraft-social.de , bisschen Werbung … , zu sehen. Also habe ich eine Rest API mit JSON in das Plugin installiert. Hier kann ich nun verschiedene Dinge abfragen und natürlich das Admin Tool ansprechen.

Ebenso hab ich minecraft-server.eu für votings implementiert. Sodass es nun Belohnungen dafür regnen kann.

Die Plugin Datenbank ist gleichzeitig für die Webseite zuständig so dass die Adminshops von dort aus administriert werden können. Hier können auch die Nachrichten Aufgaben, welche in regelmässigen Intervallen erscheinen zu bearbeiten.

Bis jetzt eine Runde Sache.