Suche

über alle News und Events

 

Alle News

 

Zwei Tage im Zeichen der Integration auf der...

Weiterlesen

Zwei Tage im Zeichen der Integration auf der...

Weiterlesen

Ein knackiger und kompakter Überblick auf die...

Weiterlesen

Auch am dritten Tag gab es interessante...

Weiterlesen

Die großen Ankündigungen aus dem ersten Tag...

Weiterlesen

Keynote - Stand der Integration - Jon Fancey:...

Weiterlesen

Integrieren Sie noch oder managen Sie bereits den...

Weiterlesen

Inwieweit lassen sich vorhandene BizTalk Lösungen...

Weiterlesen

Wie kann ein Prozess Monitoring einfach und...

Weiterlesen

Führende Veranstaltung rund um Connectivity auf...

Weiterlesen

How-to: Wie man eine modulare Azure-Deployment-Pipeline in YML baut

Will man in Azure eine Deployment-Pipeline bauen, stehen dafür mehrere Möglichkeiten zur Verfügung, z.B. ARM Templates. In diesem Artikel stelle ich das Deployment mittels einer YML Pipeline in Unterstützung von Powershell vor. Dabei möchte ich zeigen, wie man die Pipeline modular so bauen kann, sdass man diverse Templates in einem zentralen Repository liegen hat, die man dann in diversen Pipelines in mehreren Projekten verwenden kann.

Ein zentrales Repository anlegen

Zunächst sollte ein Repository angelegt werden. Dieses soll unsere Powershell Scripts und YML Templates beinhalten. Ich schlage hierfür folgende Ordnerstruktur vor:

Das Powershell Script

Als nächstes sollte das Powershell Script angelegt werden. Ein solches Script könnte wie folgt aussehen:

[CmdletBinding()]
param (

    # Name of the Event Grid Domain.
    [Parameter(Mandatory=$true, HelpMessage="Name of the Event Grid Domain.")]
    [Alias("n")]*
    [string]$Name,

    # Name of the Location, like westeurope.
    [Parameter(Mandatory=$true, HelpMessage="Name of the Location.")]
    [Alias("l")]
    [string]$Location,   

    # Name of the Resource Group.
    [Parameter(Mandatory=$true, HelpMessage="Name of the Resource Group.")]
    [Alias("g")]
    [string]$ResourceGroup

)

Write-Verbose"Deploy Event Grid Domain $Name..."

azeventgriddomaincreate--name"$Name"-g"$ResourceGroup"-l"$Location"

 

$endpoint= $(azeventgriddomainlist-g"$ResourceGroup"--query"[?name=='$Name'].endpoint"-otsv)
Write-Output ("##vso[task.setvariable variable=DeployEventGridDomainOutput.Endpoint;issecret=true]$endpoint")

$domainKey= $(azeventgriddomainkeylist--name"$Name"--resource-group"$ResourceGroup"--query"key1"-otsv)
if (!$domainKey)
{
    Write-Error"EventGrid Domain key '$Key' could not be found in EventGrid Domain '$Name'!"

}
else
{
    Write-Output ("##vso[task.setvariable variable=DeployEventGridDomainOutput.Key;issecret=true]$domainKey")

}

Write-Verbose"Event Grid Domain created"

 

Das YML Template

Anschließend können wir ein YML Step Template erzeugen, dieses könnte in etwa so aussehen:

parameters:
nameAzureSubscription
  typestring
nameName
  typestring
nameLocation
  typestring
nameResourceGroup
  typestring
nameScriptPath
  typestring
  default'$(Build.SourcesDirectory)/shared/pipelines/scripts'

steps:
taskAzureCLI@2
  displayName'Deploy EventGrid Domain ${{ parameters.Name }}'
  inputs:
    azureSubscription${{ parameters.AzureSubscription }}
    scriptTypepscore
    scriptPath'${{ parameters.ScriptPath }}/Deploy-EventGrid-Domain.ps1'
    arguments'-Name "${{ parameters.Name }}" -Location "${{ parameters.Location }}" -ResourceGroup "${{ parameters.ResourceGroup }}"'
    powerShellErrorActionPreferencestop
    addSpnToEnvironmentfalse
    useGlobalConfigfalse
    failOnStandardErrorfalse
    powerShellIgnoreLASTEXITCODEfalse

Das Template nimmt die Parameter entgegen, die das PowerShell Script selbst benötigt und leitet diese als Argumente weiter. Außerdem nimmt es den ScriptPath als Parameter entgegen, gibt hierfür jedoch einen Standardpfad an. Das erlaubt es uns, das zugehörige Script auch als lokale Kopie einzubinden, falls Beispielsweise kurzzeitig etwas am Script lokal getestet werden soll.

Einbinden in eine Pipeline

Nun, da das YML-Template und das Powershell-Script existieren, können wir das Ganze in einer tatsächlichen Pipeline einbauen und verwenden.

name'1.$(Year:yy).$(DayOfYear)$(Rev:rr)'

# TODO: Hier stünden natürlich noch Dinge wie Trigger, Pools, Variablen etc.

resources:
  pipelines:
  - 
pipelineshared
    sourceMy.Project.SharedPipelineRepository

stages:
stagedeploy_eventgrid_domain_stage
  displayNameDeploy EventGrid Domain
  dependsOn: [dependency_stage_a, dependency_stage_b]
  jobs:
  - 
deploymentdeploy_eventgrid_domain_job
    displayNameDeploy EventGrid Domain
    workspace:
      cleanall
    environment$(MyProject.Environment)
    strategy:
      runOnce:
        deploy:
          steps:
          - 
checkout: self
            path: s
          -
checkout: shared
            path: shared

          - templatetemplates/steps/Deploy-EventGrid-Domain.yml@shared
            parameters:
              AzureSubscription$(Shared.ServiceConnection.Stateful)
              Name$(MyProject.EventGridDomainName)
              Location$(MyProject.DefaultLocation)
              ResourceGroup$(MyProject.ResourceGroupNameStateless)

Wichtig sind hierbei folgende Punkte:

  • Wenn ein Repository wie shared eingebunden wurde, und etwas aus dem eigentlichen Repository benötigt wird, muss self, sofern im Job benötigt, explizit ausgecheckt werden. Hierbei sollte der Pfad auf den Wert „s“ gesetzt werden, da dies das Standardverhalten wäre, wenn der Checkout nicht explizit vorgenommen werden würde.
  • Das shared-Repository sollte mit dem Pfad „shared“ ausgecheckt werden. Im Template haben wir den Standardpfad so konfiguriert, dass dieser automatisch passt. Sollte ein anderer Name gewollt sein, so sollte dieser überall angepasst werden

 

Schlusswort

Dieses Beispiel stellt natürlich keine komplette Pipeline dar, sondern lediglich einen simplen Step. Man kann sich damit aber wunderbar Module aufbauen, um alles Mögliche zu erreichen und einzustellen, ganz nach den jeweiligen Bedürfnissen.

Und da man alle Steps und Scripte an einem Ort hat, kann man diese einfacher pflegen und verhindert so gekonnt, dass sich mehrere Pipelines individuell auseinanderentwickeln.

Ihre Kontaktmöglichkeiten

Sie haben eine konkrete Frage an uns


 

Bleiben Sie immer auf dem Laufenden


 

Mit meinem "Ja" erkläre ich mich mit der Verarbeitung meiner Daten zur Zusendung von Informationen einverstanden. Ich weiß, dass ich diese Erklärung jederzeit durch einfache Mitteilung widerrufen kann. Bei einem Nein an dieser Stelle erhalte ich zukünftig keine Informationen mehr.

© QUIBIQ GmbH · Impressum · Datenschutz