Como usar o Azure DevOps para publicar Serviços de Nuvem (suporte estendido)
Este artigo fornece diretrizes sobre como usar o modelo do ARM (Azure Resource Manager) para criar ou atualizar a implantação dos Serviços de Nuvem do Azure (suporte estendido).
Tela de fundo
Os Serviços de Nuvem do Azure (suporte estendido) são um novo modelo de implantação baseado em ARM para os Serviços de Nuvem do Azure. Serviços de Nuvem (suporte estendido) têm o principal benefício de fornecer resiliência regional junto com a paridade de recursos com os Serviços de Nuvem do Azure implantados usando o Service Manager do Azure. Ele também oferece alguns recursos do ARM, como RBAC (acesso e controle baseados em função), marcas, políticas e oferece suporte a modelos de implantação.
Para os Serviços de Nuvem clássicos, o AzureCloudPowerShellDeployment@1 de tarefas de pipeline interno do Azure DevOps pode ajudar a gerenciar facilmente o progresso da CI/CD. Mas a tarefa para Serviços de Nuvem (suporte estendido) ainda não está pronta.
Principais pontos para publicação de Serviços de Nuvem (suporte estendido)
- Defina algumas variáveis para a conta de armazenamento a ser preparada para a implantação do modelo do ARM.
- Use a tarefa VSBuild@1 – Visual Studio build v1 para criar o projeto de serviço de nuvem e gerar o arquivo de pacote de serviço de nuvem ou o arquivo de configuração.
- Use a tarefa interna AzureFileCopy@5 – cópia de arquivo do Azure v5 para carregar um diretório de build no armazenamento de blobs.
- Use a referência de armazenamento, incluindo a chave de acesso, para gerar um token SAS por AzurePowerShell@5 tarefa – Azure PowerShell v5 e envie o token para uma variável que será usada na próxima tarefa.
- Use a saída da tarefa anterior e o valor da tarefa AzureResourceManagerTemplateDeployment@3 – implantação de modelo do ARM v3.
Etapas para publicar os Serviços de Nuvem (suporte estendido)
Crie um pipeline inicial e prepare-se para carregar na conta de armazenamento. Essas variáveis podem ajudar nas seguintes operações adicionais.
- <stg_account o nome da conta de armazenamento>
- <stg_key chave de acesso da conta de armazenamento>
- <stg_container nome do contêiner da conta de armazenamento>
- stg_prefix $[format('{0:yyyyMMddHHmm}', pipeline.startTime)]
- stg_url
https://$(stg_account).blob.core.windows.net/$(stg_container)
- <cscfg_name o nome do arquivo de configuração>
- <cspkg_name o nome do arquivo de pacote>
- url_cscfg $(stg_url)/$(stg_prefix)/$(cscfg_name)
- url_cspkg $(stg_url)/$(stg_prefix)/$(cspkg_name)
Use a tarefa de build do Visual Studio para criar sua tarefa com base no arquivo de solução de projeto de serviço de nuvem e enviá-la para um caminho local no agente. Para mais informações, consulte MSBuild.
Aqui está o arquivo YAML para criar um projeto:
# 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)'
Use a tarefa de pipeline AzureFileCopy@4 – tarefa de cópia de arquivo do Azure v4 para carregar os arquivos de configuração, definição e pacote do serviço de nuvem. A tarefa dá suporte à autenticação com base na ID do Microsoft Entra. A autenticação pode ser feita usando uma entidade de serviço e uma identidade gerenciada. Você pode atribuir a permissão Colaborador e Colaborador de Dados do Blob de Armazenamento para permitir o acesso de conexões de serviço.
Encontre o princípio de serviço nas configurações do projeto:
A versão YAML do File Copy:
# 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
Depois de copiar o arquivo, você verá o pacote de serviço de nuvem copiado no armazenamento.
Use a tarefa de pipeline do Azure PowerShell para gerar um token SAS temporário por cinco minutos.
# 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'
Use a tarefa de pipeline de modelo do ARM para implantar a implantação dos Serviços de Nuvem (suporte estendido). Para obter o modelo de exemplo, consulte 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'
Após a conclusão da implantação, você deverá ver os resultados da tarefa a seguir e o serviço de nuvem com a marca. Você pode alterar o código e a configuração para atualizar a implantação atual.
No portal do Azure, você pode encontrar os resultados da implantação no grupo de recursos do serviço de nuvem.
O rótulo de implantação deve ser o mesmo que o carimbo de data/hora definido.
Entre em contato conosco para obter ajuda
Se você tiver dúvidas ou precisar de ajuda, crie uma solicitação de suporte ou peça ajuda à comunidade de suporte do Azure. Você também pode enviar comentários sobre o produto para a comunidade de comentários do Azure.