Freigeben über


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

Dieser Artikel enthält Anleitungen zur Verwendung der Vorlage Azure Resource Manager (ARM), um die Bereitstellung von Azure Cloud Services (erweiterter Support) zu erstellen oder zu aktualisieren.

Hintergrund

Azure Cloud Services (erweiterter Support) ist ein neues ARM-basiertes Bereitstellungsmodell für Azure Cloud Services. Die Hauptvorteile von Cloud Services (erweiterter Support) sind die regionale Resilienz sowie die Featureparität mit Azure Cloud Services bei der Bereitstellung mit Azure Service Manager. Es bietet auch einige ARM-Funktionen wie rollenbasierte Zugriffs- und Steuerungsfunktionen (RBAC), Tags, Richtlinien und unterstützt Bereitstellungsvorlagen.

Bei klassischen Cloud Services kann die integrierte Pipelineaufgabe von Azure DevOps AzureCloudPowerShellDeployment@1 den CI/CD-Fortschritt problemlos verwalten. Die Aufgabe für Cloud Services (erweiterter Support) ist jedoch noch nicht bereit.

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 die Aufgabe "VSBuild@1 – Visual Studio Build v1 ", um das Clouddienstprojekt zu erstellen und die Datei des Clouddienstpakets oder die Konfigurationsdatei auszugeben.
  3. Verwenden Sie die integrierte AzureFileCopy@5 – Azure-Dateikopie v5-Aufgabe, um ein Buildverzeichnis in den BLOB-Speicher 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 in eine Variable aus, die in der nächsten Aufgabe verwendet wird.
  5. Verwenden Sie die Ausgabe der vorherigen Aufgabe und den Wert für die AzureResourceManagerTemplateDeployment@3 – ARM-Vorlagenbereitstellung v3-Aufgabe.

Screenshot der zuletzt ausgeführten Pipelines.

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

  1. Erstellen Sie eine Startpipeline, und bereiten Sie den Upload auf das Speicherkonto vor. Diese Variablen können bei den folgenden weiteren Vorgängen helfen.

    • <stg_account den Namen des Speicherkontos>
    • <stg_key Zugriffsschlüssel des Speicherkontos>
    • <stg_container Containername des Speicherkontos>
    • stg_prefix $[format('{0:yyyyMMdHHmm}', 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 von Variablen.

  2. Verwenden Sie die Visual Studio-Buildaufgabe, um Ihre Aufgabe basierend auf Der Projektmappendatei des Clouddiensts zu erstellen und sie in einen lokalen Pfad für den Agent auszugeben. Weitere Informationen finden Sie unter MSBuild.

    Screenshot eines Beispiels für eine Clouddienst-Projektmappendatei.

    Hier ist 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 die Pipelineaufgabe AzureFileCopy@4 – Azure-Dateikopie v4-Aufgabe , um die Konfigurations-, Definitions- und Paketdateien des Clouddiensts hochzuladen. Die Aufgabe unterstützt die Authentifizierung basierend auf der Microsoft Entra-ID. Die Authentifizierung kann mithilfe eines Dienstprinzipals und einer verwalteten Identität erfolgen. Sie können die Berechtigung "Mitwirkender" und "Storage Blob Data Contributor" zuweisen, um den Zugriff auf Dienstverbindungen zu ermöglichen.

    Suchen Sie das Dienstprinzip in den Projekteinstellungen:

    Screenshot eines Dienstverbindungstypbeispiels.

    Screenshot der Rollenzuweisungen.

    Die YAML-Version der 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 im Speicher kopiert wird.

  4. Verwenden Sie die Azure PowerShell-Pipelineaufgabe, um ein temporäres SAS-Token für fünf Minuten 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 die ARM-Vorlagenpipelineaufgabe, um die Bereitstellung von 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 ein Vorgangsergebnis.

Im Azure-Portal finden Sie die Bereitstellungsergebnisse in der Ressourcengruppe "Clouddienst".

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.