Neuste Posts

27.05.2019

Azure DevOps [Pipelines]: Build und Deploy einer Angular-App nach Firebase

In agilen Softwareteams ist Continuous Integration und Continuous Deployment unentbehrlich! Die durch die Entwickler publizierten Versionen einer Applikation sollen über sogenannte Build- und Release-Pipelines fortlaufend gegen die vordefinierten Qualitätsanforderungen geprüft und automatisch auf Testinstanzen installiert werden.

Mit Azure DevOps Pipelines lässt sich dies einfach bewerkstelligen. In diesem Beitrag wird anhand eines einfachen Beispiels aufgezeigt, wie eine unter Google Firebase betriebene Angular-Applikation (https://meyer74.ch) über Azure DevOps automatisiert "deployed" wird.


1. Build-Pipeline
Im Portal von Azure DevOps wählen wir unter Pipelines den Punkt Builds, damit ein neuer Build-Prozess für die Applikation erstellt werden kann.





Connect: Über einen Wizard müssen wir zuerst die Quelle des Repositories auswählen.




Select: In diesem Beispiel verwenden wir ein GIT-Repository aus Azure DevOps.

Configure: Danach wechselt der Wizard auf den Schritt Configure und ein neues YML-File wird im Repository hinzugefügt. Alle Steps unserer Build-Pipeline werden in der Yaml-Syntax in diesem File hinterlegt. Mit jedem Save an den Yaml-Configurations wird in GIT zudem ein Commit ausgeführt. Dadurch sind alle Änderungen jederzeit nachvollziehbar und an die Applikation gebunden.

In diesem Build sollen in einem ersten Schritt die notwendigen NPM-Pakete der Angular Applikation installiert werden. Dazu können wir über Tasks einen neuen Task des Typs npm hinzufügen.


- task: Npm@1
displayName: 'npm install'
inputs:
command: install
workingDir: meyer74.SPA/src

In einem zweiten Schritt soll die Applikation für einen produktiven Build bereitgestellt werden. Dadurch wird im Arbeitsverzeichnis des Build-Agents ein dist-Verzeichnis mit den auszuliefernden Files generiert.


- task: Npm@1
displayName: 'Build Angular'
inputs:
command: custom
customCommand: run build -- --prod
workingDir: meyer74.SPA/src


Nun muss ein Build-Artefakt erstellt werden, dass später in der Release-Pipeline auf eine Instanz deployed werden kann.

In einem ersten Schritt kopieren wir dazu den Folder dist in ein neues Verzeichnis namens deploy.


- task: CopyFiles@2
inputs:
SourceFolder: 'meyer74.SPA/dist'
Contents: '**'
TargetFolder: 'meyer74.SPA/deploy/dist'
CleanTargetFolder: true

Da die Applikation unter Google-Firebase bereitgestellt werden soll, muss das File firebase.json zwingend im Build-Artefakt enthalten sein. Daher kopieren wir das File in einem separaten Task in den neu angelegten Folder deploy.

- task: CopyFiles@2
inputs:
SourceFolder: 'meyer74.SPA'
Contents: 'firebase.json'
TargetFolder: 'meyer74.SPA/deploy'
OverWrite: true

Als letzter Schritt im Build muss das finale Build-Artefakt erstellt werden. Dazu kann ein neuer Task vom Typ Publish Pipeline Artifact hinzugefügt werden.


- task: PublishPipelineArtifact@0
inputs:
artifactName: 'drop'
targetPath: 'meyer74.SPA/deploy'

Nachdem der Build gespeichert ist, kann dieser über run ausgeführt werden. Ein erfolgreich ausgeführter Build zeigt im Artifacts explorer folgende Verzeichnisstruktur.




2. Release-Pipeline
Nachdem das Build-Artefakt generiert worden ist, kann dieses automatisiert auf eine Test- und/oder Produktionsinstanz deployed werden. In diesem Beispiel soll ein Deployment auf Google Firebase erfolgen.


Im Portal von Azure DevOps unter Pipelines den Punkt Release wählen, damit ein neuer Release-Prozess für die Applikation erstellt werden kann.



Um eine Applikation nach Firebase zu deployen, sind folgende Parameter erforderlich:
  • Firebase Token
  • Firebase Project

Der Firebase Token kann über Firebase-CLI (Firebase-Tool) mit firebase login:ci generiert werden.

Unter Azure DevOps können wir diese beiden Parameter als Variablen hinterlegen.




Nun kann ein neuer Release angelegt werden. Unter Tasks wird in einem ersten Schritt ein Task vom Typ Command Line angelegt, der die Firebase-Tools auf dem Release-Agent installiert.

npm i -g firebase-tools



Im zweiten Schritt erfolgt das eigentliche Deployment nach Firebase. Dabei werden die Parameter Firebase Token und Firebase Project über die hinterlegten Variablen mitgeliefert.

firebase deploy --token $(firebasetoken) --project $(firebaseproject)


Danach kann der Release gespeichert und ausgeführt werden. Nach erfolgreicher Ausführung ist das Firebase Deployment im Log des Releases ersichtlich.