Come usare Azure DevOps per pubblicare Servizi cloud (supporto esteso)

Questo articolo fornisce indicazioni su come usare il modello di Azure Resource Manager (ARM) per creare o aggiornare la distribuzione di Azure Servizi cloud (supporto esteso).

Background

Azure Servizi cloud (supporto esteso) è un nuovo modello di distribuzione basato su ARM per Azure Servizi cloud. Servizi cloud (supporto esteso) offre il vantaggio principale di offrire resilienza a livello di area insieme alla parità di funzionalità con Azure Servizi cloud distribuito con Azure Service Manager. Offre anche alcune funzionalità di Arm, ad esempio l'accesso e il controllo degli accessi in base al ruolo, tag, criteri e supporta i modelli di distribuzione.

Per i Servizi cloud classici, l'attività della pipeline predefinita di Azure DevOps AzureCloudPowerShellDeployment@1 può semplificare la gestione dello stato ci/CD. Ma l'attività per Servizi cloud (supporto esteso) non è ancora pronta.

Punti principali per la pubblicazione di Servizi cloud (supporto esteso)

  1. Definire alcune variabili per l'account di archiviazione da preparare per la distribuzione del modello di Resource Manager.
  2. Usare l'attività VSBuild@1 - Visual Studio build v1 per compilare il progetto di servizio cloud e restituire il file o il file di configurazione del pacchetto del servizio cloud.
  3. Usare l'attività predefinita AzureFileCopy@5 - Copia file v5 di Azure per caricare una directory di compilazione nell'archivio BLOB.
  4. Usare il riferimento di archiviazione che include la chiave di accesso per generare un token di firma di accesso condiviso tramite AzurePowerShell@5- Azure PowerShell attività v5 e restituire il token a una variabile che verrà usata nell'attività successiva.
  5. Usare l'output dell'attività precedente e il valore per l'attività AzureResourceManagerTemplateDeployment@3 - Distribuzione modello ARM v3.

Screenshot delle pipeline eseguite di recente.

Passaggi per pubblicare Servizi cloud (supporto esteso)

  1. Creare una pipeline di avvio e prepararsi per il caricamento nell'account di archiviazione. Queste variabili possono essere utili per le altre operazioni seguenti.

    • <stg_account il nome dell'account di archiviazione>
    • <stg_key chiave di accesso dell'account di archiviazione>
    • <stg_container nome del contenitore dell'account di archiviazione>
    • stg_prefix $[format('{0:yyyyMMddHHmm}', pipeline.startTime)]
    • stg_url https://$(stg_account).blob.core.windows.net/$(stg_container)
    • <cscfg_name il nome del file di configurazione>
    • <cspkg_name il nome del file del pacchetto>
    • url_cscfg $(stg_url)/$(stg_prefix)/$(cscfg_name)
    • url_cspkg $(stg_url)/$(stg_prefix)/$(cspkg_name)

    Screenshot delle variabili.

  2. Usare l'attività di compilazione di Visual Studio per compilare l'attività in base al file di soluzione del progetto del servizio cloud e inviarla a un percorso locale nell'agente. Per altre informazioni, vedere MSBuild.

    Screenshot di un esempio di file di soluzione del progetto di servizio cloud.

    Ecco il file YAML per compilare un progetto:

    # 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. Usare l'attività della pipeline AzureFileCopy@4 - Attività copia file v4 di Azure per caricare i file di configurazione, definizione e pacchetto del servizio cloud. L'attività supporta l'autenticazione basata su Microsoft Entra ID. L'autenticazione può essere eseguita usando un'entità servizio e un'identità gestita. È possibile assegnare l'autorizzazione Collaboratore e Collaboratore dati BLOB di archiviazione per consentire l'accesso alle connessioni del servizio.

    Trovare il principio di servizio nelle impostazioni del progetto:

    Screenshot di un esempio di tipo di connessione al servizio.

    Screenshot delle assegnazioni di ruolo.

    Versione YAML di Copia file:

    # 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
    

    Dopo aver copiato il file, verrà visualizzato il pacchetto del servizio cloud copiato nell'archiviazione.

    Screenshot di un pacchetto del servizio cloud copiato nell'archiviazione.

  4. Usare l'attività della pipeline Azure PowerShell per generare un token di firma di accesso condiviso temporaneo per cinque minuti.

    # 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. Usare l'attività della pipeline del modello arm per distribuire la distribuzione Servizi cloud (supporto esteso). Per ottenere il modello di esempio, vedere 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. Al termine della distribuzione, verranno visualizzati i risultati delle attività seguenti e il servizio cloud con il tag . È possibile modificare il codice e la configurazione per aggiornare la distribuzione corrente.

    Screenshot di un esempio di risultato dell'attività.

Nel portale di Azure è possibile trovare i risultati della distribuzione nel gruppo di risorse del servizio cloud.

Screenshot di un esempio di risultato della distribuzione.

L'etichetta di distribuzione deve corrispondere al timestamp definito.

Screenshot di un esempio di etichetta di distribuzione.

Contattaci per ricevere assistenza

In caso di domande o bisogno di assistenza, creare una richiesta di supporto tecnico oppure formula una domanda nel Supporto della community di Azure. È possibile anche inviare un feedback sul prodotto al feedback della community di Azure.