Freigeben über


Verwenden von Azure DevOps zum Veröffentlichen von Cloud Services (erweiterter Support)

Dieser Artikel enthält Anleitungen zur Verwendung der Azure Resource Manager-Vorlage (ARM) zum Erstellen oder Aktualisieren der Bereitstellung von Azure Cloud Services (erweiterter Support).

Hintergrund

Azure Cloud Services (erweiterter Support) ist ein neues ARM-basiertes Bereitstellungsmodell für Azure Cloud Services. Cloud Services (erweiterter Support) bietet den Hauptvorteil der regionalen Resilienz sowie der Featureparität mit Azure Cloud Services, die mithilfe von Azure Service Manager bereitgestellt werden. Es bietet auch einige ARM-Funktionen wie rollenbasierte Zugriffs- und Steuerungsfunktionen (Role-Based Access and Control, RBAC), Tags, Richtlinien und unterstützt Bereitstellungsvorlagen.

Bei klassischen Cloud Services kann der integrierte Azure DevOps-Pipelinetask AzureCloudPowerShellDeployment@1 dabei helfen, den CI/CD-Fortschritt einfach zu verwalten. Die Aufgabe für Cloud Services (erweiterter Support) ist jedoch noch nicht fertig.

Hauptpunkte für die Veröffentlichung von Cloud Services (erweiterter Support)

  1. Definieren Sie einige Variablen für das Speicherkonto, um die Bereitstellung der ARM-Vorlage vorzubereiten.
  2. Verwenden Sie den Task VSBuild@1 – Visual Studio Build v1 , um das Clouddienstprojekt zu erstellen und die Clouddienstpaketdatei oder -konfigurationsdatei auszugeben.
  3. Verwenden Sie die integrierte Aufgabe AzureFileCopy@5 – Azure-Dateikopie v5 , um ein Buildverzeichnis in den Blobspeicher hochzuladen.
  4. Verwenden Sie den Speicherverweis einschließlich des Zugriffsschlüssels, um ein SAS-Token durch AzurePowerShell@5 - Azure PowerShell v5-Aufgabe zu generieren, und geben Sie das Token an eine Variable aus, die in der nächsten Aufgabe verwendet wird.
  5. Verwenden Sie die Ausgabe der vorherigen Aufgabe und den Wert für den Task AzureResourceManagerTemplateDeployment@3 – ARM-Vorlagenbereitstellung v3.

Screenshot: Kürzlich ausgeführte Pipelines.

Schritte zum Veröffentlichen von Cloud Services (erweiterter Support)

  1. Erstellen Sie eine Starterpipeline, und bereiten Sie den Upload in das Speicherkonto vor. Diese Variablen können bei den folgenden weiteren Vorgängen hilfreich sein.

    • <stg_account des Namens des Speicherkontos>
    • <stg_key Zugriffsschlüssel des Speicherkontos>
    • <stg_container Containername des Speicherkontos>
    • stg_prefix $[format('{0:yyyyMMddHHmm}', pipeline.startTime)]
    • stg_url https://$(stg_account).blob.core.windows.net/$(stg_container)
    • <cscfg_name den Namen der Konfigurationsdatei>
    • <cspkg_name den Namen der Paketdatei>
    • url_cscfg $(stg_url)/$(stg_prefix)/$(cscfg_name)
    • url_cspkg $(stg_url)/$(stg_prefix)/$(cspkg_name)

    Screenshot der Variablen.

  2. Verwenden Sie den Visual Studio-Buildtask, um Ihre Aufgabe basierend auf der Projektmappendatei ihres Clouddiensts zu erstellen und in einem lokalen Pfad auf dem Agent auszugeben. Weitere Informationen finden Sie unter MSBuild.

    Screenshot eines Beispiels für eine Clouddienstprojektmappendatei.

    Hier sehen Sie die YAML-Datei zum Erstellen eines Projekts:

    # Build your project under your repository.
    # 1. Restore the NuGet dependency.
    
    - task: NuGetCommand@2
      inputs:
        command: 'restore'
        restoreSolution: '**/*.sln'
        feedsToUse: 'select'
        vstsFeed: xxx
    
    # 2. Use MS build to output the cloud service project configuration and package to the temporary location of the local agent.
    
    - task: VSBuild@1
      inputs:
        solution: '**\*.sln'
        msbuildArgs: '/t:Publish /p:DeployOnBuild=true /p:AutomatedBuild=True /p:configuration=release /p:TargetProfile=Cloud /p:PublishDir=%SYSTEM_DEFAULTWORKINGDIRECTORY%/Debug/publish'
    
    # 3. Copy the configuration and package files to the local path on the agent where any artifacts locate.
    
    - task: CopyFiles@2
      inputs:
        SourceFolder: 'Debug/publish'
        Contents: '**'
        TargetFolder: '$(Build.ArtifactStagingDirectory)'
    
    # 4. Copy the definition file to the local path on the agent where any artifacts locate.
    
    - task: CopyFiles@2
      inputs:
        SourceFolder: 'Project'
        Contents: '*.csdef'
        TargetFolder: '$(Build.ArtifactStagingDirectory)'
    
  3. Verwenden Sie den Pipelinetask AzureFileCopy@4 – Azure-Dateikopiervorgang v4 , um die Konfigurations-, Definitions- und Paketdateien des Clouddiensts hochzuladen. Der Task unterstützt die Authentifizierung basierend auf Microsoft Entra ID. Die Authentifizierung kann mithilfe eines Dienstprinzipals und einer verwalteten Identität erfolgen. Sie können die Berechtigung Mitwirkender und Mitwirkender an Storage-Blobdaten zuweisen, um den Zugriff auf Dienstverbindungen zu ermöglichen.

    Suchen Sie das Dienstprinzipal in den Projekteinstellungen:

    Screenshot eines Beispiels für einen Dienstverbindungstyp.

    Screenshot: Rollenzuweisungen

    Die YAML-Version von Dateikopie:

    # Upload the cloud service via Azure File Copy
    - task: AzureFileCopy@5
      inputs:
        SourcePath: '$(Build.ArtifactsStagingDirectory) /*'        # you can set $(Build.ArtifactsStagingDirectory) as Build part for output of the MSBuild.
        azureSubscription: xxx                                     # the name of service connector
        Destination: 'AzureBlob'
        storage: $(stg_account)                                    # variable stg_account
        ContainerName: $(stg_container)                            # variable stg_container
        BlobPrefix: $(stg_prefix)                                  # variable stg prefix is $[format('{0:yyyyMMddHHmm}', pipeline.startTime)]
        AdditionalArgumentsForBlobCopy: '--recursive'              # recursively copy the files in this directory
    

    Nach dem Kopieren der Datei wird das kopierte Clouddienstpaket im Speicher angezeigt.

    Screenshot eines Clouddienstpakets, das in den Speicher kopiert wird

  4. Verwenden Sie den Azure PowerShell-Pipelinetask, um fünf Minuten lang ein temporäres SAS-Token zu generieren.

    # Generate temp SAS token for 5 mins
    - task: AzurePowerShell@5                                                     # please make sure the Azure PowerShell contains the module of Az and AzureRm.
      name: GenerateSasToken
      inputs:
        azureSubscription: xxx                                                    # the name of service connector
        ScriptType: 'InlineScript'
        Inline: |
          $account_name = ${env:STG_ACCOUNT}
          $account_key = ${env:STG_KEY}
          $context = New-AzStorageContext -StorageAccountName $account_name -StorageAccountKey $account_key
          $sas = New-AzStorageAccountSASToken -Service Blob -ResourceType Service,Container,Object -Permission "rl" -ExpiryTime (Get-Date).AddMinutes(5) -Context $context
          $cspkg = ${env:URL_CSPKG} + $sas
          $cscfg = ${env:URL_CSCFG} + $sas
          Write-Host ("##vso[task.setvariable variable=cspkg]$cspkg")             # output $cspkg in PowerShell to global variable cspkg
          Write-Host ("##vso[task.setvariable variable=cscfg]$cscfg")             # output $cscfg in PowerShell to global variable cscfg
        azurePowerShellVersion: 'LatestVersion'
    
  5. Verwenden Sie den Pipelinetask der ARM-Vorlage, um die bereitstellung Cloud Services (erweiterter Support) bereitzustellen. Informationen zum Abrufen der Beispielvorlage finden Sie unter 101-cses-multirole-rdp.

    #Azure Resource Manager template deployment
    - task: AzureResourceManagerTemplateDeployment@3                               
      inputs:
        deploymentScope: 'Resource Group'                                           # resource group level deployment
        azureResourceManagerConnection: xxx                                         # the name of service connector
        subscriptionId: xxx                                                         # subscription id of the service connector
        action: 'Create Or Update Resource Group'
        resourceGroupName: 'rg-002'                                                                               
        location: 'Australia Central'
        templateLocation: 'Linked artifact'
        csmFile: 'Template/CSES.template.json'
        csmParametersFile: 'Template/CSES.parameter.json'
        overrideParameters: '-packageSasUri $(cspkg) -configurationSasUri $(cscfg) -cloudServiceName cses4test002 -deploymentLabel deploy$(stg_prefix)' # overwrite some parameters of template.
        deploymentMode: 'Incremental'
    
  6. Nach Abschluss der Bereitstellung sollten die folgenden Aufgabenergebnisse und der Clouddienst mit dem Tag angezeigt werden. Sie können den Code und die Konfiguration ändern, um die aktuelle Bereitstellung zu aktualisieren.

    Screenshot eines Beispiels für das Ergebnis einer Aufgabe.

Im Azure-Portal finden Sie die Bereitstellungsergebnisse in der Clouddienstressourcengruppe.

Screenshot eines Beispiels für ein Bereitstellungsergebnis.

Die Bereitstellungsbezeichnung sollte mit dem von Ihnen definierten Zeitstempel identisch sein.

Screenshot eines Beispiels für eine Bereitstellungsbezeichnung.

Kontaktieren Sie uns für Hilfe

Wenn Sie Fragen haben oder Hilfe mit Ihren Azure-Gutschriften benötigen, dann erstellen Sie beim Azure-Support eine Support-Anforderung oder fragen Sie den Azure Community-Support. Sie können auch Produktfeedback an die Azure Feedback Community senden.