{"id":726,"date":"2021-12-08T18:34:38","date_gmt":"2021-12-08T17:34:38","guid":{"rendered":"https:\/\/informatik.htwk-leipzig.de\/seminar\/?p=726"},"modified":"2022-01-09T15:49:35","modified_gmt":"2022-01-09T14:49:35","slug":"azure-devops","status":"publish","type":"post","link":"https:\/\/informatik.htwk-leipzig.de\/seminar\/lehrveranstaltungen\/betriebliche-informationssysteme\/2021\/azure-devops\/","title":{"rendered":"Azure DevOps"},"content":{"rendered":"<h1>Einf\u00fchrung<\/h1>\n<p>Azure ist einer der Cloud Services von Microsoft und bietet:<\/p>\n<ul>\n<li>Infrastructure as a Service (IaaS): Cloudserver, Cloudspeicher, Netzwerktechnologien (Firewall, VPN, Loadbalancer&#8230;)<\/li>\n<li>Platform as a Service (PaaS): VMs, Container Apps, Kubernetes, Functions&#8230;<\/li>\n<li>Service as a Service (SaaS): Office, CRM, ERP&#8230;<\/li>\n<\/ul>\n<p>DevOps stellt einen Dienst von Azure dar, um die Organsation und Entwicklung von Software Produkten zu unterst\u00fctzen.<\/p>\n<blockquote><p>DevOps is a set of practices intended to reduce the time between committing a change to a system and the change being placed into normal production, while ensuring high quality<\/p><\/blockquote>\n<p>(Bass, Len; Weber, Ingo; Zhu, Liming (2015). DevOps: A Software Architect&#8217;s Perspective. ISBN 978-0134049847)<\/p>\n<p>DevOps unterst\u00fctzt und verkn\u00fcpft mit dessen verschiedenen Werkzeugen verschiedene Praktiken der Software Produkt Entwicklung\u00a0 (lt. WIkipedia : https:\/\/en.wikipedia.org\/wiki\/DevOps):<\/p>\n<ul>\n<li><strong>Coding<\/strong> \u2013 code development and review, source code management tools, code merging.<\/li>\n<li><strong>Building<\/strong> \u2013 continuous integration tools, build status.<\/li>\n<li><strong>Testing<\/strong> \u2013 continuous testing tools that provide quick and timely feedback on business risks.<\/li>\n<li><strong>Packaging<\/strong> \u2013 artifact repository, application pre-deployment staging.<\/li>\n<li><strong>Releasing<\/strong> \u2013 change management, release approvals, release automation.<\/li>\n<li>(<strong>Configuring<\/strong> \u2013 infrastructure configuration and management, infrastructure as code tools.)<\/li>\n<li>(<strong>Monitoring<\/strong> \u2013 applications performance monitoring, end-user experience.)<\/li>\n<\/ul>\n<p>Die beiden letzten Punkte sind jedoch nicht in Azure DevOps vertreten.<\/p>\n<h2>Was wollen wir zeigen?<\/h2>\n<p>Anhand eines Beispiels wollen wir pr\u00e4sentieren wie DevOps Prinzipien in Azure umgesetzt werden k\u00f6nnen.<br \/>\nDabei sollen verschiedene Protagonisten (Stakeholder\/Product Owner, Entwickler, Betrieb) an dem Prozess teilhaben um die F\u00e4higkeiten der Azure DevOps Plattform hervorzustellen.<\/p>\n<h1>Boards<\/h1>\n<p>Azure Boards bietet Tools zum Organisieren von Software Entwicklung. Das Ziel ist das schnelle Nachvollziehung von User Storys, Fehlern, Features und Epics. Es werden vier verschiedene Prozessarten unterst\u00fctzt die man zum erstellen des Projektes w\u00e4hlt: Agile, Basic, Scrum, or Capability Maturity Model Integration (CMMI)<\/p>\n<p>Dieser Artikel beschreibt die Funktionen der agilen Prozess Art.<\/p>\n<h2>Planen und Nachverfolgen der Arbeit<\/h2>\n<p>Zun\u00e4chst ist in Boards eine einfache Planung und Nachverfolgung der Arbeit innerhalb des Teams m\u00f6glich. Zum einen f\u00fcr den Projekt Manager, als auch f\u00fcr die Entwickler, Tester, Designer, ect. des Teams.<\/p>\n<h3>Konfiguration der Prozessart<\/h3>\n<p>Die verschiedenen Arbeitsprozesse bieten verschiedene Typen f\u00fcr die sogenannten &#8218;Workitems&#8216;. Bei der Wahl eines Agilen Prozesses sind diese unter anderem User Stories, Tasks, Bugs, Features und Epics. Des weiteren bieten die verschiedenen Prozesse passende Statusbezeichnungen. Im Fall des agilen Prozesses sind diese &#8218;New&#8216;, &#8218;Active&#8216; und &#8218;Resolved&#8216;.<\/p>\n<p>Innerhalb jedes Workitems kann unter anderen die Aufgabe n\u00e4her beschrieben, ein Bearbeiter zugeordnet und mit anderen dar\u00fcber ausgetauscht werden. Des weiteren k\u00f6nnen direkt von Workitems aus Branches in der Versions-Kontrolle erstellt werden. Damit sind die Branches direkt mit dem jeweiligen Item verkn\u00fcpft.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-974\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2021\/12\/agile-process-wits.png\" alt=\"\" width=\"337\" height=\"279\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-975\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2021\/12\/agile-hierarchy.png\" alt=\"\" width=\"343\" height=\"541\" \/><\/p>\n<h3>Anlegen neuer Workitems<\/h3>\n<p>Nach der Erstellung eines Projektes k\u00f6nnen direkt Workitems erstellt und hinzugef\u00fcgt werden. \u00dcber das User-Story-Kanbanboard (erreichbar durch das Men\u00fc-Element &#8218;Boards &gt; Boards&#8216;) lassen sich am besten neue User Stories und Child-Tasks erstellen. Das Board l\u00e4sst sich des weitern auf Ebene der Features betrachten und bietet eine gute M\u00f6glichkeit um Features und entsprechende Child Tasks anzulegen.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-977\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2021\/12\/choose-features-board.png\" alt=\"\" width=\"724\" height=\"271\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-976\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2021\/12\/add-child-task.png\" alt=\"\" width=\"553\" height=\"287\" \/><\/p>\n<h3>Projektorganisation mit Scrum Tools<\/h3>\n<p>Mit dem Scrum-Tools von Azure Boards lassen sich Sprints planen und durchf\u00fchren. Aus dem Backlog des Projektes kann daf\u00fcr in der Planung ein Sprint-Backlog aufgebaut werden. In dem Men\u00fcpunkt &#8218;Boards &gt; Backlog&#8216; l\u00e4sst sich der Backlog organisieren und Items aus dem Backlog in die zu planende Iteration hinzuf\u00fcgen. In dem Men\u00fcpunkt &#8218;Boards &gt; Sprint&#8216; l\u00e4sst sich anschlie\u00dfend das Sprintboard, dessen Backlog und der Burndown anzeigen und \u00fcberwachen.<\/p>\n<h2>Anpassen der Boards<\/h2>\n<p>Die verschiedenen Boards k\u00f6nnen jeweils angepasst werden. H\u00e4ufige Personalisierungen sind:<\/p>\n<ul>\n<li><strong>Felder: <\/strong>Welche Felder werden f\u00fcr jedes Workitem angezeigt<\/li>\n<li><strong>Spalten:<\/strong> Spalten hinzuf\u00fcgen, umbenennen und bearbeiten<\/li>\n<li><strong>Unterteilung:<\/strong> Das Board kann in Priorit\u00e4t, Service Klassen oder geblockte Items unterteilt werden mit &#8218;Swimlanes&#8216;<\/li>\n<li><strong>Backlog:<\/strong> F\u00fcr Epics und Issues kann das Tracking aktiviert\/deaktiviert werden<\/li>\n<\/ul>\n<h1>Repos<\/h1>\n<p>Azure Repos ist ein Service der die Versionskontrolle und Code Verwaltung erm\u00f6glicht. Dabei wird das Git Versionskontrollsystem verwendet. Es werden die bei Git \u00fcblichen Funktionen angeboten, wie Branches, Commits, Pull-Requests erstellen etc. Dar\u00fcber hinaus bietet Azure DevOps in der Weboberfl\u00e4che die M\u00f6glichkeit unterschiedliche Aspekte des Versionskontrollsystems zu verwalten. Unter anderem lassen sich Pull-Requests bearbeiten, die Commit Historie kann eingesehen werden und die Dateien und Ordner in dem Repository angezeigt und bearbeitet werden.<\/p>\n<p>Neben Git l\u00e4sst sich auch die Team Foundation Versionskontrolle verwenden (die ist im Gegensatz zu Git zentralisiert).<\/p>\n<figure id=\"attachment_1066\" aria-describedby=\"caption-attachment-1066\" style=\"width: 256px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-1066 size-full\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2021\/12\/Screenshot-from-2022-01-09-10-22-10.png\" alt=\"\" width=\"256\" height=\"289\" \/><figcaption id=\"caption-attachment-1066\" class=\"wp-caption-text\">Die verschiedenen Bereiche von Repos<\/figcaption><\/figure>\n<h2>Einbindung von Git in DevOps<\/h2>\n<p>Um den Mehraufwand bei der Entwicklungsarbeit zu verringen, lassen sich Ereignisse die in der Arbeit mit dem Repository auftreten mit weiteren Bereichen des DevOps Services verbinden. Eine M\u00f6glichkeit ist, Workitems (Tickets, Storys etc.) mit einem Branch zu verkn\u00fcpfen. Bei entsprechender Konfiguration f\u00fchrt das Mergen eines Branches in einen Anderen dazu, dass alle, mit dem ersten Branch verkn\u00fcpften, Tickets geschlo\u00dfen werden.<\/p>\n<figure id=\"attachment_1068\" aria-describedby=\"caption-attachment-1068\" style=\"width: 415px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1068\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2021\/12\/Screenshot-from-2022-01-09-10-28-15.png\" alt=\"\" width=\"415\" height=\"137\" \/><figcaption id=\"caption-attachment-1068\" class=\"wp-caption-text\">Hier kann die Verkn\u00fcfung zwischen Workitem und Branch erstellt werden.<\/figcaption><\/figure>\n<p>Ein weiteres Beispiel ist das automatische Ansto\u00dfen einer Build-Pipeline, falls in einem bestimmten Branch ein neuer Commit registriert wird.<br \/>\nUm auf dem eigenen Rechner mit der Arbeit an einem Projekt zu beginnen, das in Azure Repos lebt, muss im DevOps Projekt zun\u00e4chst ein \u00f6ffentlicher SSH Schl\u00fcssel vom eigenen Rechner hinterlegt werden. Ab da k\u00f6nnen wie gewohnt die Git Kommandos auf der Kommandozeile oder \u00fcber die IDE ausgef\u00fchrt werden.<\/p>\n<div class=\"mceTemp\"><\/div>\n<figure id=\"attachment_1069\" aria-describedby=\"caption-attachment-1069\" style=\"width: 1333px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-1069 size-full\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2021\/12\/Screenshot-from-2022-01-09-10-32-07.png\" alt=\"\" width=\"1333\" height=\"459\" \/><figcaption id=\"caption-attachment-1069\" class=\"wp-caption-text\">Repos bietet auch einen Editor im Browser.<\/figcaption><\/figure>\n<h2>Workflow<\/h2>\n<p>Ein \u00fcblicher Workflow, der die verschiedenen Funktionen von Azure Repos nutzt k\u00f6nnte folgenderderma\u00dfen aussehen:<\/p>\n<ul>\n<li>der*die Entwickler<em>*<\/em>in findet in DevOps Boards ein neues Ticket<\/li>\n<li>er*sie erstellt direkt aus der Ticket-Ansicht heraus einen neuen Branch<\/li>\n<li>lokal wechselt er*sie auf den neu erstellten Branch und beginnt zu arbeiten<\/li>\n<li>nach getaner Arbeit pusht er*sie das Ergebnis und erstellt \u00fcber DevOps einen Pull-Request<\/li>\n<li>ein Senior Developer begutachtet diesen<\/li>\n<li>er*sie befindet die \u00c4nderungen als gut und f\u00fchrt den Merge in den develop Branch durch<\/li>\n<li>damit schlie\u00dft sich automatisch das Ticket und eine Pipeline wird angesto\u00dfen, welche den neuen Stand des develop<br \/>\nBranches baut und daraufhin auf eine Entwicklungsumgebung deployed<\/li>\n<\/ul>\n<figure id=\"attachment_1070\" aria-describedby=\"caption-attachment-1070\" style=\"width: 1619px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-1070 size-full\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2021\/12\/Screenshot-from-2022-01-09-10-35-22.png\" alt=\"\" width=\"1619\" height=\"802\" \/><figcaption id=\"caption-attachment-1070\" class=\"wp-caption-text\">So sieht die Oberfl\u00e4che zur Bearbeitung eines Pull-Requests aus.<\/figcaption><\/figure>\n<h1>Pipelines<\/h1>\n<h2>Bereich Build-Pipelines<\/h2>\n<h3>1. Eine Build-Pipeline erstellen<\/h3>\n<p>Um eine Pipeline zu erstellen, gehen wir unter &#8222;Pipelines&#8220; &#8211;&gt; &#8222;Pipelines&#8220;.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-986\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2021\/12\/1.png\" alt=\"\" width=\"268\" height=\"666\" \/><\/p>\n<h3>2. Bestimmung der Pipeline Art<\/h3>\n<p>Es besteht die M\u00f6glichkeit zwischen zwei Arten von Pipelines zu w\u00e4hlen. Die erste Option basiert auf einer YAML-Datei (XML in der UI) und die zweite Option &#8222;Use the classic editor&#8220; finden wir unten und bietet eine grafische UI an.<\/p>\n<h4>2.1 Vor- und Nachteile<\/h4>\n<table>\n<tbody>\n<tr>\n<td><\/td>\n<td>YAML<\/td>\n<td>Classic<\/td>\n<\/tr>\n<tr>\n<td>Code Review<\/td>\n<td>Ja<\/td>\n<td>&#8211;<\/td>\n<\/tr>\n<tr>\n<td>Security-Richtlinien<\/td>\n<td>&#8211;<\/td>\n<td>Ja<\/td>\n<\/tr>\n<tr>\n<td>Sicherheit vor Ver\u00e4nderung<\/td>\n<td>&#8211;<\/td>\n<td>Ja<\/td>\n<\/tr>\n<tr>\n<td>Sicherheit vor Sichtbarkeit<\/td>\n<td>&#8211;<\/td>\n<td>Ja<\/td>\n<\/tr>\n<tr>\n<td>Einfache Verst\u00e4ndlichkeit<\/td>\n<td>&#8211;<\/td>\n<td>Ja<\/td>\n<\/tr>\n<tr>\n<td>Unterst\u00fctzung beim Aufbau<\/td>\n<td>&#8211;<\/td>\n<td>Ja<\/td>\n<\/tr>\n<tr>\n<td>Vordefinierte Templates<\/td>\n<td>&#8211;<\/td>\n<td>Ja<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-987\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2021\/12\/2.png\" alt=\"\" width=\"684\" height=\"576\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>In diesem Beispiel wurde der klassische Editor gew\u00e4hlt.<\/p>\n<h3>3. Woher kommt der Quellcode?<\/h3>\n<p>Es ist gleich woher der Quellcode f\u00fcr die Pipeline stammt. Azure DevOps stellt sehr viele M\u00f6glichkeiten zur Verf\u00fcgung. Sei es durch direkte Integration wie GitHub oder andere Git-basierte Quellcodeverwaltungssysteme.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-988\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2021\/12\/3.png\" alt=\"\" width=\"723\" height=\"480\" \/><\/p>\n<h3>4. Auswahl eines Template<\/h3>\n<p>Von Haus aus stellt Azure DevOps eine gro\u00dfe Anzahl von Templates zur Verf\u00fcgung. Docker container, Android Apps, Desktop Anwendungen, usw. Und falls diese M\u00f6glichkeiten nicht reichen, k\u00f6nnen \u00fcber den &#8222;Marketplace&#8220; weitere Templates heruntergeladen werden. [Azure DevOps Marketplace](https:\/\/marketplace.visualstudio.com\/search?target=AzureDevOps&amp;category=Azure%20Pipelines&amp;sortBy=Installs)<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-989\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2021\/12\/4.png\" alt=\"\" width=\"965\" height=\"820\" \/><\/p>\n<h4>4.1 Leeres Template<\/h4>\n<p>Dies ist das Standard Template von Azure DevOps.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-990\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2021\/12\/5.png\" alt=\"\" width=\"1648\" height=\"491\" \/><\/p>\n<h4>4.2 ASP Core Template<\/h4>\n<p>Dies ist das Template f\u00fcr eine ASP NET Core Web-Anwendung. Ohne weitere Klicks ist diese Pipeline voll funktionst\u00fcchtig. Abh\u00e4ngigkeiten laden, Anwendung bauen, testen und innerhalb von Azure DevOps zur Verf\u00fcgung stellen.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-991\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2021\/12\/6.png\" alt=\"\" width=\"1637\" height=\"647\" \/><\/p>\n<h3>5. Variablen<\/h3>\n<p>Variablen werden genutzt, um innerhalb der Pipeline Werte zu hinterlegen. Diese k\u00f6nnen durch folgende Syntax verwendet werden: $(NameDerVariable). Dies bietet einen zentralen Ort zum Speichern von Informationen. Man kann sie \u00fcber &#8222;Variable groups&#8220; mit anderen Pipelines teilen. Ein weiteres Feature ist das &#8222;verstecken&#8220; von Variablenwerten f\u00fcr Passw\u00f6rter, Datenbankverbindungen und andere sensible Informationen.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-992\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2021\/12\/7.png\" alt=\"\" width=\"1381\" height=\"441\" \/><\/p>\n<h3>6. Trigger<\/h3>\n<p>Hier wird das eigentliche &#8222;Continuous integration&#8220; definiert. W\u00e4hlen wir die Option &#8222;Enable continuous integration&#8220; so wird die Pipeline jedes mal ausgef\u00fchrt, wenn neuer Quellcode zum Repo hinzukommt. Dies kann man auf einen oder mehrere Branches und zus\u00e4tzlich Pfade innerhalb eines Projektes beschr\u00e4nken.<\/p>\n<p>Eine andere Option ist die zeitgesteuerte Ausf\u00fchrung.<\/p>\n<p>Zum Schluss kann man noch eine andere Build-Pipeline ansto\u00dfen, wenn diese erfolgreich durchgelaufen ist.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-993\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2021\/12\/8.png\" alt=\"\" width=\"1202\" height=\"555\" \/><\/p>\n<h3>7. Options<\/h3>\n<p>Hier sind einige hilfreiche Features hinterlegt. Das &#8222;build number format&#8220; gibt das Anzeigeformat des Durchlauf der Pipeline an. Auch die &#8222;Status badges&#8220; sind n\u00fctzlich f\u00fcr einen schnellen \u00dcberblick \u00fcber alle Pipelines.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-994\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2021\/12\/9.png\" alt=\"\" width=\"828\" height=\"836\" \/><\/p>\n<h3>8. History<\/h3>\n<p>F\u00fcr die Nachverfolgung von \u00c4nderungen ist der Historien Bereich mehr als n\u00fctzlich. Hier kann nicht nur eingesehen werden wer wann was ge\u00e4ndert hat, sondern auch zu welchem Wert der Vorherige ge\u00e4ndert wurde.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-995\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2021\/12\/10.png\" alt=\"\" width=\"1058\" height=\"202\" \/><\/p>\n<h2>Bereich Release-Pipelines<\/h2>\n<h3>1. Eine Release-Pipeline erstellen<\/h3>\n<p>Unter dem Reiter &#8222;Pipelines&#8220; &#8211;&gt; &#8222;Releases&#8220; k\u00f6nnen wir eine neue Release-Pipeline erstellen.<br \/>\nAndere Punkte:<\/p>\n<ul>\n<li>Environments : Ressourcen f\u00fcr eine YAML-Pipeline f\u00fcr Container und virtuelle Maschinen<\/li>\n<li>Library: Definition von Variablen-Gruppen und sicheren Dateien<\/li>\n<li>Task groups: Vordefinierter Prozess in Tasks aufgeteilt<\/li>\n<li>Deployment groups: Vordefinierter Prozess f\u00fcr ein Release\/Stage<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-996\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2021\/12\/11.png\" alt=\"\" width=\"256\" height=\"626\" \/><\/p>\n<h3>2. Auswahl eines Templates<\/h3>\n<p>Als erstes wird nach einem Template gefragt. Hier k\u00f6nnen wir aus dutzenden vorgefertigten Abl\u00e4ufen w\u00e4hlen oder mit einem leeren &#8222;Empty job&#8220; Ablauf starten.<br \/>\nBeispiele f\u00fcr Vorlagen:<\/p>\n<ul>\n<li>Azure App Service<\/li>\n<li>Kubernetes cluster<\/li>\n<li>IIS website and SQL database<\/li>\n<li>andere Datenbanken<\/li>\n<\/ul>\n<p>Wie bei anderen Vorlagen k\u00f6nnen auch hier weitere aus dem Marketplace heruntergeladen werden.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-997\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2021\/12\/12.png\" alt=\"\" width=\"1634\" height=\"713\" \/><\/p>\n<p>&nbsp;<\/p>\n<h3>3. Leeres Template<\/h3>\n<p>Ein Beispiel f\u00fcr eine leere Vorlage. Hier wird alles von Grund auf selbst definiert.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-998\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2021\/12\/13.png\" alt=\"\" width=\"1656\" height=\"519\" \/><\/p>\n<h3>4. Auswahl des Quellcodes \u00fcber eine Pipeline<\/h3>\n<p>Als n\u00e4chstes definiert man eine oder mehrere Quellen von seinen Anwendungen die ver\u00f6ffentlicht werden soll. Sie sind als &#8222;Artifacts&#8220; hinterlegt und werden \u00fcber die Build-Pipelines zur Verf\u00fcgung gestellt. Das Einbinden von externen Quellen wie GitHub ist ebenfalls m\u00f6glich. Man kann mit einer Release-Pipeline gleich mehrere Anwendungen auf verschiedene Ziele ver\u00f6ffentlichen.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-999\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2021\/12\/14.png\" alt=\"\" width=\"1645\" height=\"663\" \/><\/p>\n<p>&nbsp;<\/p>\n<h3>5. Continuous deployment aktivieren<\/h3>\n<p>Um eine vollwertige CI\/CD Pipeline einzurichten, m\u00f6chten wir, nachdem unser Projekt erfolgreich gebaut wurde, diese danach automatisch auf bestimmte Ziele ver\u00f6ffentlichen. Dazu klicken wir auf das Blitz-Symbol unser Quelle. Hier eine Build-Pipeline. Danach \u00f6ffnet sich das Fenster auf der rechten Seite. Wir aktivieren den Punkt &#8222;Enabled&#8220;. Jetzt wird die Release-Pipeline getriggert, jedes mal, wenn die Build-Pipeline erfolgreich durchgelaufen ist. Auch hier kann man mit den &#8222;Build branch filters&#8220; erneut den Branch spezifizieren.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1000\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2021\/12\/15.png\" alt=\"\" width=\"1654\" height=\"615\" \/><\/p>\n<h3>6. Stageweises ver\u00f6ffentlichen einer Anwendung<\/h3>\n<p>In diesem Beispiel wird eine Anwendung auf verschiedene Stages ver\u00f6ffentlicht. Eine &#8222;Stage&#8220; ist eine bestimmte Umgebung. Entweder kann sie jeweils einen Server repr\u00e4sentieren oder, f\u00fcr eine Web-Anwendung, jeweils eine bestimmte Subdomain. Bsp.: dev.example.de, qa.example.de, test.example.de, example.de .<br \/>\nBei diesem Aufbau kann man erst die Anwendung auf TEST ver\u00f6ffentlichen, wenn sie vorher auf dem DEV &amp; QA Stage waren.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1001\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2021\/12\/16.png\" alt=\"\" width=\"1296\" height=\"616\" \/><\/p>\n<h3>7. Trigger\/Gates f\u00fcr Stages<\/h3>\n<p>Klickt man bei einem Stage auf das Blitz\/Person-Symbol (hellblau Hintergrund) kann man &#8222;Pre-deployment conditions&#8220; definieren.<\/p>\n<ul>\n<li>nach einem bestimmten Stage (&#8222;Stages&#8220;)<\/li>\n<li>wenn eine Person oder Gruppe zustimmt (&#8222;Pre-deployment approvals&#8220;)<\/li>\n<li>manuell ver\u00f6ffentlichen (&#8222;Select trigger&#8220;)<\/li>\n<li>Aktion ausf\u00fchren (&#8222;Gates&#8220;) z.B.: Api-Request<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1002\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2021\/12\/17.png\" alt=\"\" width=\"1625\" height=\"866\" \/><\/p>\n<p>&nbsp;<\/p>\n<h3>8. Spezifischer &#8222;deployment task&#8220;<\/h3>\n<p>Innerhalb der Stage kann man den genauen Prozess spezifizieren, wie die Anwendung auf das Ziel kommt. Hier kann beinahe jede bekannte Methode verwendet werden. Z.B.: SSH, (S)FTP, Google Play Store, verschiedene Datenbanken, jeder Azure Service und viele weitere Verbindungsvorlagen (\u00fcber Marketplace erh\u00e4ltlich).\u00a0 Aufgebaut wird sie wie eine Build-pipeline.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1003\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2021\/12\/18.png\" alt=\"\" width=\"1641\" height=\"784\" \/><\/p>\n<h3>9. Variablen<\/h3>\n<p>Die Variablen \u00e4hneln stark denen der Build-Pipeline. Zus\u00e4tzlich kann man hier einen &#8222;Scope&#8217;s&#8220; definieren. Eine Scope bildet eine Stage ab bzw. ein &#8222;Release&#8220;, welches als default value dient, falls diese Variable f\u00fcr alle Stages vorgesehen ist.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1004\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2021\/12\/19.png\" alt=\"\" width=\"1651\" height=\"357\" \/><\/p>\n<p>&nbsp;<\/p>\n<h3>10. Retention<\/h3>\n<p>Hier wird die Dauer definiert, wie lange ein Release im Azure DevOps gespeichert wird. Diese Feature ist sehr n\u00fctzlich. Z.B.: es wird ein neues Release ver\u00f6ffentlicht und es kommt zu Problemen auf dem Produktivserver. Dann kann man einfach in das vorherige Release springen und dort die funktionst\u00fcchtige Version erneut ver\u00f6ffentlichen.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1005\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2021\/12\/20.png\" alt=\"\" width=\"1608\" height=\"414\" \/><\/p>\n<p>&nbsp;<\/p>\n<h3>11. Options<\/h3>\n<p>Unter den Optionen kann am eine Beschreibung f\u00fcr das Release hinterlegen und ein Release-Format bestimmen. Dies dient der besseren \u00dcbersicht.<\/p>\n<p>Bei den &#8222;Integrations&#8220; kann der Release-Prozess mit einem Ticket verkn\u00fcpft werden. Das hilft den Entwicklern zur besseren Kontrolle, ob ihr neues Feature bereits ver\u00f6ffentlicht wurde oder nicht.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1006\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2021\/12\/21.png\" alt=\"\" width=\"1593\" height=\"310\" \/><\/p>\n<h3>12. History<\/h3>\n<p>Im Historien-Bereich k\u00f6nnen alle \u00c4nderungen am Release nachverfolgt werden. Hier wird gespeichert wer wann was ge\u00e4ndert hat. Dies ist ein weiteres Kontrollinstrument, welches der Sicherheit und der Nachvollziehbarkeit dient.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1007\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2021\/12\/22.png\" alt=\"\" width=\"1612\" height=\"187\" \/><\/p>\n<h1>Quellen<\/h1>\n<p>Dokumentation:<\/p>\n<ul>\n<li>https:\/\/docs.microsoft.com\/de-de\/azure\/devops\/?view=azure-devops<\/li>\n<\/ul>\n<p>Quellen:<\/p>\n<ul>\n<li>https:\/\/en.wikipedia.org\/wiki\/DevOps<\/li>\n<li>https:\/\/docs.microsoft.com\/en-us\/azure\/devops\/boards\/get-started\/plan-track-work?view=azure-devops&amp;tabs=agile-process (Zuletzt Abgerufen: 19.12.2021)<\/li>\n<li>https:\/\/docs.microsoft.com\/en-us\/azure\/devops\/boards\/sprints\/scrum-overview?view=azure-devops (Zuletzt Abgerufen: 19.12.2021)<\/li>\n<\/ul>\n<p>Bildquellen:<\/p>\n<ul>\n<li>https:\/\/docs.microsoft.com\/en-us\/azure\/devops\/boards\/get-started\/plan-track-work?view=azure-devops&amp;tabs=agile-process (Zuletzt Abgerufen: 19.12.2021)<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Einf\u00fchrung Azure ist einer der Cloud Services von Microsoft und bietet: Infrastructure as a Service (IaaS): Cloudserver, Cloudspeicher, Netzwerktechnologien (Firewall,<\/p>\n","protected":false},"author":53,"featured_media":1014,"comment_status":"open","ping_status":"open","sticky":false,"template":"templates\/template-fullwidth.php","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[51,62,28,58,66,59,60,63,64,61,65],"class_list":["post-726","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-betriebliche-informationssysteme","tag-azure","tag-board","tag-cloud","tag-devops","tag-git","tag-iaas","tag-paas","tag-pipeline","tag-repo","tag-saas","tag-versionskontrolle"],"_links":{"self":[{"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/posts\/726","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/users\/53"}],"replies":[{"embeddable":true,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/comments?post=726"}],"version-history":[{"count":34,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/posts\/726\/revisions"}],"predecessor-version":[{"id":1099,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/posts\/726\/revisions\/1099"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/media\/1014"}],"wp:attachment":[{"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/media?parent=726"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/categories?post=726"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/tags?post=726"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}