Compartilhar via


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)

  1. Defina algumas variáveis para a conta de armazenamento se preparar para a implantação do modelo do ARM.
  2. 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.
  3. Use a tarefa AzureFileCopy@5 interna – cópia de arquivo do Azure v5 para carregar um diretório de build no armazenamento de blobs.
  4. 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.
  5. Use a saída da tarefa anterior e o valor da tarefa AzureResourceManagerTemplateDeployment@3 – implantação de modelo do ARM v3.

Captura de tela de pipelines executados recentemente.

Etapas para publicar Serviços de Nuvem (suporte estendido)

  1. 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)

    Captura de tela de variáveis.

  2. 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.

    Captura de tela de um exemplo de arquivo de solução de projeto de serviço de nuvem.

    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)'
    
  3. 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:

    Captura de tela de um exemplo de tipo de conexão de serviço.

    Captura de tela das atribuições de função.

    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.

    Captura de tela de um pacote de serviço de nuvem copiado no armazenamento.

  4. 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'
    
  5. 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'
    
  6. 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.

    Captura de tela de um exemplo de resultado de tarefa.

No portal do Azure, você pode encontrar os resultados da implantação no grupo de recursos do serviço de nuvem.

Captura de tela de um exemplo de resultado de implantação.

O rótulo de implantação deve ser o mesmo que o carimbo de data/hora definido.

Captura de tela de um exemplo de rótulo de implantação.

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.