{"id":258,"date":"2019-03-24T20:04:35","date_gmt":"2019-03-24T20:04:35","guid":{"rendered":"http:\/\/tachi-it.com\/?p=258"},"modified":"2019-03-24T20:04:36","modified_gmt":"2019-03-24T20:04:36","slug":"infrastructure-as-code-mit-azure-devops","status":"publish","type":"post","link":"https:\/\/tachi-it.com\/infrastructure-as-code-mit-azure-devops\/","title":{"rendered":"Infrastructure as Code mit Azure DevOps"},"content":{"rendered":"\n

Im letzten Beitrag<\/a> haben wir kurz vorgestellt, wie wir Infrastruktur in Azure via Azure ARM und Azure CLI bereitstellen k\u00f6nnen. Dieses Vorgehen wird als Infrastructure as Code (IaC<\/a>) bezeichnet. <\/p>\n\n\n\n

Dabei mussten wir feststellen, dass trotz einheitlicher Skripte bestimmte Parameter mehrfach angegeben werden m\u00fcssen. Gerade die Eingabe des SQL Admin Passworts ist umst\u00e4ndlich, fehleranf\u00e4llig und f\u00fcr den Produktivbetrieb letztendlich ungeeignet. Dar\u00fcber hinaus ben\u00f6tigt man zum Ausf\u00fchren der Skripte die erforderlichen Rechte.<\/p>\n\n\n\n

Aus diesem Grund nutzen wir Azure DevOps<\/a>, fr\u00fcher bekannt als Visual Studio Online (VSO) oder auch Visual Studio Team Service (VSTS). Azure DevOps hat neben verschiedenen Pipeline Arten ….<\/p>\n\n\n\n

Erstellen der Release Pipeline<\/h2>\n\n\n\n

Wir werden f\u00fcr unser Beispiel einzig die Release Pipelines<\/a> verwenden. Diese Art beruht urspr\u00fcnglich auf vorangegangenen Build Pipelines und deren Artefakte. Vereinfacht werden wir direkt auf das entsprechende GitHub<\/a> zugreifen und dessen Skripte nutzen.<\/p>\n\n\n\n

Daf\u00fcr Links die Option Artifacts –> Add<\/em> w\u00e4hlen, dann das entsprechende GitHub Repository w\u00e4hlen. Weiter muss ein Default Branch gew\u00e4hlt werden. Dieser ist wichtig, um in nachfolgenden Schritten durch das Repository navigieren zu k\u00f6nnen, kann jedoch f\u00fcr jedes Release ge\u00e4ndert werden.<\/p>\n\n\n\n

<\/div>\n\n\n
\r\n\r\n
\r\n\t\"\"\r\n<\/div>\r\n\r\n<\/div><\/div><\/div>
\r\n\r\n
\r\n\t\"\"\r\n<\/div>\r\n\r\n<\/div><\/div><\/div><\/div><\/div><\/div><\/div><\/div><\/div>\n\n\n
<\/div>\n\n\n\n

Ebenfalls ist es m\u00f6glich, einen Continuous Deployment (CD)<\/em> Trigger zu installieren. Ob es f\u00fcr IaC sinnvoll ist, ist immer abh\u00e4ngig von den konkreten Anforderrungen an die IaC Skripte. Es kann durchaus Sinn ergeben, dass w\u00e4hrend der Entwicklung der Skripte, regelm\u00e4\u00dfiges Ausf\u00fchren zur besseren Qualit\u00e4t beitragen kann, um Fehler fr\u00fchzeitig aufdecken zu k\u00f6nnen.<\/p>\n\n\n\n

<\/div>\n\n\n
\r\n\r\n
\r\n\t\"\"\r\n<\/div>\r\n\r\n<\/div><\/div><\/div>
\r\n\r\n
\r\n\t\"\"\r\n<\/div>\r\n\r\n<\/div><\/div><\/div>
\r\n\r\n
\r\n\t\"\"\r\n<\/div>\r\n\r\n<\/div><\/div><\/div><\/div><\/div><\/div><\/div><\/div><\/div>\n\n\n

Zuerst m\u00fcssen wir eine Stage anlegen und uns f\u00fcr einen Namen entscheiden. Wir legen eine leere (empyte) Stage an und w\u00e4hlen die Bezeichnung dev<\/strong>. Da wir planen Shell Skripte auszuf\u00fchren, ist es aktuell notwendig, aus dem Agent Pool einen Linux Agent zu w\u00e4hlen. Andernfalls kann es zu seltsamen Fehlermeldungen kommen, wie z.B. das File deploy.sh<\/em> kann nicht gefunden werden.<\/p>\n\n\n

\r\n\r\n
\r\n\t\"\"\r\n<\/div>\r\n\r\n<\/div><\/div><\/div>
\r\n\r\n
\r\n\t\"\"\r\n<\/div>\r\n\r\n<\/div><\/div><\/div>
\r\n\r\n
\r\n\t\"\"\r\n<\/div>\r\n\r\n<\/div><\/div><\/div><\/div><\/div>\n\n\n

Setup for SQL Azure Deployment<\/h2>\n\n\n\n

Nachdem die Stage erstellt wurde, m\u00fcssen wir einen entsprechenden Azure CLI Task hinzuf\u00fcgen. Dabei ist es unwichtig, ob wir Azure CLI commands direkt absetzen oder Skripte ausf\u00fchren wollen.<\/p>\n\n\n

\r\n\r\n
\r\n\t\"\"\r\n<\/div>\r\n\r\n<\/div><\/div><\/div><\/div><\/div>\n\n\n
<\/div>\n\n\n\n

Bevor wir den Task fertig konfigurieren k\u00f6nnen, sollten wir kurz \u00fcberlegen, welche Parameter f\u00fcr die Ausf\u00fchrung des Skripts deploy-sql.sh<\/em> im Ordner SQLAzure<\/em> notwendig sind. Da wir versuchen m\u00f6glichst viel \u00fcber die Pipeline bestimmen zu k\u00f6nnen, ben\u00f6tigen wir daf\u00fcr nachfolgende Parameter.<\/p>\n\n\n\n