Como usar o Azure DevOps para publicar Serviços de Nuvem (suporte estendido)
Este artigo fornece diretrizes sobre como usar o modelo arm (Azure Resource Manager) para criar ou atualizar a implantação do Azure Serviços de Nuvem (suporte estendido).
Histórico
O Azure Serviços de Nuvem (suporte estendido) é um novo modelo de implantação baseado em ARM para o Azure Serviços de Nuvem. Serviços de Nuvem (suporte estendido) tem o principal benefício de fornecer resiliência regional juntamente com a paridade de recursos com o Azure Serviços de Nuvem implantado usando o Azure Service Manager. Ele também oferece alguns recursos do ARM, como RBAC (acesso e controle baseado em função), marcas, políticas e dá suporte a modelos de implantação.
Para Serviços de Nuvem clássicos, a tarefa de pipeline interno do Azure DevOps AzureCloudPowerShellDeployment@1 pode ajudar a gerenciar o progresso de CI/CD facilmente. 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 se preparar para a implantação do modelo do ARM.
- Use a tarefa VSBuild@1 – Build v1 do Visual Studio para criar o projeto do serviço de nuvem e gerar o arquivo de pacote de serviço de nuvem ou o arquivo de configuração.
- Use a tarefa AzureFileCopy@5 interna – 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 - Azure PowerShell tarefa v5 e gere 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 Serviços de Nuvem (suporte estendido)
Crie um pipeline inicial e prepare-se para carregar na conta de armazenamento. Essas variáveis podem ajudar com as operações adicionais a seguir.
- <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:yyyyMddHHmm}', 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 do serviço de nuvem e desembasá-la para um caminho local no agente. Para obter 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 v4 de cópia de arquivo do Azure para carregar os arquivos de configuração, definição e pacote do serviço de nuvem. A tarefa dá suporte à autenticação com base em Microsoft Entra ID. 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 de Blobs de Armazenamento para permitir o acesso de conexões de serviço.
Localize o princípio de serviço nas configurações do projeto:
A versão YAML da Cópia de Arquivo:
# 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 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 do 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'
Depois que a implantação for concluída, 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.