Dynamics Nav Buildsystem Docker

11. Mai 2018 16:16

Hallo zusammen,

ich habe die letzten Monate immer mal Dynamics Nav Versionen/ Sprachen in mein großes Git Repository eingepflegt und habe die daraus resultierenden Produkte und Kundenbranches erzeugt. Teilweise sogar recht nahe am Original oder besser :-P

Mit Kines Buildscripten habe ich jetzt einen Buildrechner erzeugt der sich den Source lädt und diesen in einer neuen Datenbank zusammenbaut und testet.

Grundsätzlich nett aber noch nicht was ich später brauche.

Ich brauche später vermutlich alleine für Dynamics Nav 2017 4 unterschiedliche CUs und Sprachen geschweige denn Nav 2018 und je nach Auslastung davon auch mehrere Maschinen um rund um die Uhr schnell viele Builds zu haben.

Die Lösung wäre jetzt für mich Docker.
Leider musste ich feststellen das nicht jede Plattform mit jedem "Docker Hoster" redet und auch eine Testversion nicht immer so Verfügbar ist ohne eine Kreditkarte zu zücken.

Mir schwebt etwas vor wie
Visual Studio Online -> Azure Docker
Bitbucket -> Bamboo Server ?
Ich habe auch gesehen das die Infoma eine Kombination aus GitHub und Appveyor benutzt.

Limitation:
Es kann sein das bei uns sowohl Versionskontrolle als auch Buildsystem lokal im Netzwerk installiert werden muss. :-(

Hat jemand dort Erfahrungen sammeln können?

Gruss Nody3000

Re: Dynamics Nav Buildsystem Docker

11. Mai 2018 16:46

Du könntest dir Powershell Scripte auf deinem Buildserver hinterlegen die das alles übernehmen.

Wir nutzen dafür Jenkins welche nach einem Commit im GitHub ein PowershellScript auf dem BuildServer mit Parametern anspricht.
Das Powershell Script läd dann den Sourcecode aus Git, läd vom Server die Symbols, baut die App, deinstalliert die App wenn schon vorhanden (mit Abhaengigkeiten) und installiert die neue Version (und alles andere was deinstalliert wurde).
Das ganze wäre auch möglich wenn im GitHub C/AL wäre (am besten natürlich als Delta).
Wenn man in den Prozess nun noch Docker implementieren möchte ist das auch kein Problem. Du öffnest dir dann einfach ne Powershell Session auf dem Dockerimage und führst alles da aus.

Solang du deinen kompletten Buildjob per Powershell ausführen kannst, koenntest du ihn so abbilden.

Re: Dynamics Nav Buildsystem Docker

11. Mai 2018 20:17

Also kurz Jenkins kann man offline installieren und der Jenkins Server verwaltet dann die Build-Agents die vermutlich auch im lokalen Netzwerk sind ?
Und ansonsten passiert all das was ich in Powershell eh Skripte ?

In meiner Vorstellung also:
1. Docker Pull Microsoft:Nav2017_CU4_DE
2. und dann Pipe ich irgendwie mit dem NavContainerHelper meinen Source und das Buildskript in den Docker und warte auf Artifacts Output ?

Müsst ihr euch um eure Buildmaschinen selber kümmern oder könnt ihr die beliebig oft frisch von der "Stange" nehmen ?

Re: Dynamics Nav Buildsystem Docker

12. Mai 2018 11:50

Dem Navcontainerhelper kannst du auch per Parameter mitgeben immer zu pullen, wenn notwendig.
Aber im Grunde hast du bei deinen Build-Prozess mit microsoft-navcontainerhelper Repo alle Möglichkeiten.
Im Docker Container selbst hast du zusätzlich Zugriff auf alle NAV-Powershell Cmdlets.

Wir haben so z.B. unsere komplette Entwicklungsumgebung auf Git und Docker umgestellt.

Re: Dynamics Nav Buildsystem Docker

12. Mai 2018 19:08

@MarkusWeiland lasst ihr es in der Cloud laufen oder lokal ? Darf man fragen welche Kombination aus Diensten ihr verwendet ?

Re: Dynamics Nav Buildsystem Docker

14. Mai 2018 08:28

Wir haben auf Azure umgestellt. Dort laufen jetzt 2016er Server VMs als Entwicklungsmaschinen.
Die Datenbanken liegen alle in einem Azure SQL-Pool. Git nutzen wir über einen Gitlab Server.

Re: Dynamics Nav Buildsystem Docker

14. Mai 2018 09:44

Wie Jenkins bei uns genau aufgesetzt ist kann ich dir leider nicht beantworten. Ich kümmer mich nur um die Powershellscripte die durch Jenkins angesprochen werden.

Von der Theorie brauchst du in etwa son Ablauf:
- NAV Docker Container erstellen (navcontainerhelper hilft hier)
- Powershell Session zum Dockercontainer herstellen
(- ggf. Kunden *.FOB / *.Delta) importieren
- Daten aus Git laden
- Importieren & Kompelieren
- Docker Container löschen

Das Ganze legst du auf nen Build Server und musst das Script dann nur noch irgendwie starten wenn xy passiert. Wer oder was das macht sollte dabei keine Rolle spielen.