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 "Extended") offre il vantaggio di fornire resilienza a livello di area insieme alla parità delle funzionalità per Servizi cloud di Azure distribuito usando Azure Service Manager. Offre anche alcune funzionalità arm, ad esempio l'accesso e il controllo in base al ruolo, i tag, i criteri e supportano i modelli di distribuzione.
Per le Servizi cloud classiche, l'attività della pipeline predefinita di Azure DevOps AzureCloudPowerShellDeployment@1 consente di gestire facilmente lo stato di avanzamento CI/CD. Tuttavia, l'attività per Servizi cloud (supporto esteso) non è ancora pronta.
Punti principali per la pubblicazione Servizi cloud (supporto esteso)
- Definire alcune variabili per l'account di archiviazione per preparare la distribuzione del modello di Resource Manager.
- Usare l'attività VSBuild@1 - Visual Studio build v1 per compilare il progetto del servizio cloud e restituire il file del pacchetto del servizio cloud o il file di configurazione.
- Usare l'attività predefinita AzureFileCopy@5 - Copia file di Azure v5 per caricare una directory di compilazione nell'archivio BLOB.
- Usare il riferimento all'archiviazione, inclusa la chiave di accesso per generare un token di firma di accesso condiviso da AzurePowerShell@5 - Attività di Azure PowerShell v5 e restituire il token a una variabile che verrà usata nell'attività successiva.
- Usare l'output dell'attività precedente e il valore per l'attività AzureResourceManagerTemplateDeployment@3 - Distribuzione del modello arm v3.
Passaggi per pubblicare Servizi cloud (supporto esteso)
Creare una pipeline iniziale e prepararsi per il caricamento nell'account di archiviazione. Queste variabili possono essere utili per le 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)
Usare l'attività di compilazione di Visual Studio per compilare l'attività in base al file della soluzione del progetto di servizio cloud e restituirla in un percorso locale nell'agente. Per altre informazioni, vedere MSBuild.
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)'
Usare l'attività pipeline AzureFileCopy@4 - Attività copia file di Azure v4 per caricare i file di configurazione, definizione e pacchetto del servizio cloud. L'attività supporta l'autenticazione basata sull'ID Microsoft Entra. L'autenticazione può essere eseguita usando un'entità servizio e un'identità gestita. È possibile assegnare l'autorizzazione Collaboratore e Collaboratore ai dati dei BLOB di archiviazione per consentire l'accesso alle connessioni al servizio.
Trovare l'entità servizio nelle impostazioni del progetto:
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, nella risorsa di archiviazione verrà visualizzato il pacchetto del servizio cloud copiato.
Usare l'attività della pipeline di 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'
Usare l'attività della pipeline del modello di Resource Manager per distribuire la distribuzione di 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'
Al termine della distribuzione, verranno visualizzati i risultati dell'attività seguenti e il servizio cloud con il tag . È possibile modificare il codice e la configurazione per aggiornare la distribuzione corrente.
Nella portale di Azure è possibile trovare i risultati della distribuzione nel gruppo di risorse del servizio cloud.
L'etichetta di distribuzione deve corrispondere al timestamp definito.
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.