W dzisiejszych czasach automatyzacja deployment’u infrastruktury jest jednym z kluczowych aspektów podczas wdrożenia chmury publicznej w organizacji. Poprawnie stworzona automatyzacja, pozwala oszczędzić ogromne zasoby czasu dla zespołów zajmujących się tworzeniem rozwiązań w chmurze.

W tym artykule spróbujemy stworzyć pipeline w Azure DevOps, który będzie wykorzystywał szablony .bicep w celu deploymentu infrastruktury. Czytając poniższy tekst dowiesz się:

  • Jak stworzyć szablon oraz moduł .bicep
  • W jaki sposób wykorzystać dwa szablony działające w innym scopie
  • Jak stworzyć nowe repository w Azure DevOps
  • Jak stworzyć Azure DevOps Pipeline
  • Jak wykonać polecenia szablonu .bicep wykorzystując Azure DevOps Pipeline

Zaczynamy od stworzenia szablonów .bicep. Poniżej zamieszczam ich zawartość oraz link do dokumentacji Microsoftu, gdzie można dowiedzieć się więcej na temat tej usługi – link

Zawartość szablonu tworzącego resource group:

@minLength(3) /* Minimalna ilość znaków w parametrze którego będziemy używać */
@maxLength(24) /* Maksymalna ilość znaków w parametrze którego będziemy używać */
@description('Provide the name for resource group. That name will be reflected in the name of Resource group in Azure') /* Opis do czego parametr zostanie wykorzystany */
param resourcegroupname string  /* Deklaracja zmiennej */
targetScope='subscription' /* Deklaracja scopeu w jakim zostanie wykorzystany szablon. W naszym przypadku jest to subscription ze względu na to iż bedziemy tworzyć RG */
resource NewRG 'Microsoft.Resources/resourceGroups@2021-04-01' = {
  name: resourcegroupname /* wykorzystanie parametru */
  location: 'westeurope' /* Lokalizacja w jakies zostanie stworzony resource */
}   /* Kod odpowiedzialny za stworzenie resource groupy */


module Vnet 'InfraDeployment.bicep' = {
  name: 'VnetDeployment'
  scope: NewRG
} /* Wykorzystanie modulu który zostanie stworzony w nastepnym kroku. */

Zawartość szablonu tworzącego wirtualną sieć w naszej resource group’ie:

param VnetName string = '${resourceGroup().name}-vnet01'  /* Deklaracja parametru który zostanie stworzony bazująć na wywołaniu modułu */
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2019-11-01' = { /* Kod odpowiedzialny za stworzenie wirtualnej sieci */
  name: VnetName
  location: resourceGroup().location
  properties: {
    addressSpace: {
      addressPrefixes: [
        '10.0.0.0/16' /* Deklaracja Address space ktory bedzie wykorzystywany przez nasza siec */
      ]
    }
    subnets: [
      {
        name: 'Subnet-vnet01-1' /* Kod odpowiedzialny za stworzenie subnetu */
        properties: {
          addressPrefix: '10.0.0.0/24'
        }
      }
      {
        name: 'Subnet-vnet01-2'
        properties: {
          addressPrefix: '10.0.1.0/24'
        }
      }
    ]
  }
}

Co warto zaznaczyć, szablon tworzący resource group musi zostać uruchomiony w innym scopie, niż szablon tworzący wirtualną sieć. Dlatego obie operacje nie są wykonywane w jednym szablonie, a jeden szablon odwołuje się do drugiego. Kolejnym krokiem jest stworzenie repository w naszej organizacji Azure DevOps oraz skonfigurowanie Azure Pipeline’u. W tym celu otwieramy naszą organizację oraz podążamy do zakładki z nazwą „Repos” oraz tworzymy nowe repository.

W kolejnym kroku, dodajemy nasze szablony do repository. Posiadając zsynchronizowane repository, możemy zacząć myśleć o Azure Pipelinie, który będzie odpowiedzialny za wykonanie poleceń opisanych w szablonach .bicep. W tym celu rozpoczynamy konfiguracje pipeline’u z poziomu repository.

Otrzymujemy najprostszy YAML Pipeline, z którego usuniemy niewymagane przez nas linie kodu zaznaczone), a następnie wyszukamy zadanie o nazwie Azure CLI. Aby skonfigurować Azure CLI będziemy potrzebowali zautoryzować połączenie do subskrypcji oraz wypełnić wymagane pola.

Docelowy YAML Pipeline wygląda następująco:

# Starter pipeline
# Start with a minimal pipeline that you can customize to build and deploy your code.
# Add steps that build, run tests, deploy, and more:
# https://aka.ms/yaml
variables:
  RGName: bicep006

trigger:
- main

steps:
- task: AzureCLI@2
  inputs:
    azureSubscription: 'MSDN Platforms(xxxxxxxx)'
    scriptType: 'bash'
    scriptLocation: 'inlineScript'
    inlineScript: 'az deployment sub create --subscription xxxxxxxx --template-file $(Build.SourcesDirectory)/ResourceGroupDeployment.bicep --parameters resourcegroupname=${{ variables.RGName }} -l westeurope'

Po skonfigurowaniu zadania odpowiedzialnego za wykonanie skryptu bash, klikamy przycisk „Save and run”. W ciągu paru minut pipeline powinien zostać wykonany, a nasze środowisko pojawi się w portalu Azure.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.