Поделиться через


Как использовать Azure DevOps для публикации Облачные службы (расширенная поддержка)

В этой статье содержатся рекомендации по использованию шаблона Azure Resource Manager (ARM) для создания или обновления развертывания Azure Облачные службы (расширенная поддержка).

Общие сведения

Azure Облачные службы (расширенная поддержка) — это новая модель развертывания на основе ARM для Azure Облачные службы. Облачные службы (расширенная поддержка) обладают основным преимуществом, заключающимся в обеспечении региональной устойчивости и равенства функций с Облачными службами Azure, развернутыми с помощью Azure Service Manager. Он также предлагает некоторые возможности ARM, такие как доступ и управление на основе ролей (RBAC), теги, политики и поддерживает шаблоны развертывания.

Для классических Облачные службы встроенная задача конвейера Azure DevOps AzureCloudPowerShellDeployment@1 может легко управлять ходом выполнения CI/CD. Но задача для Облачные службы (расширенная поддержка) еще не готова.

Основные моменты публикации Облачные службы (расширенная поддержка)

  1. Определите некоторые переменные для учетной записи хранения для подготовки к развертыванию шаблона ARM.
  2. Используйте задачу VSBuild@1 сборки Visual Studio версии 1 для создания проекта облачной службы и вывода файла пакета облачной службы или файла конфигурации.
  3. Используйте встроенную AzureFileCopy@5 — задачу копирования файлов Azure версии 5 для отправки каталога сборки в хранилище BLOB-объектов.
  4. Используйте ссылку на хранилище, включая ключ доступа для создания маркера SAS, AzurePowerShell@5 — задача Azure PowerShell версии 5 и вывод маркера в переменную, которая будет использоваться в следующей задаче.
  5. Используйте выходные данные предыдущей задачи и значение задачи AzureResourceManagerTemplateDeployment@3 — развертывание шаблона ARM версии 3.

Снимок экрана: недавно запущенные конвейеры.

Шаги по публикации Облачные службы (расширенная поддержка)

  1. Создайте начальный конвейер и подготовьте его к отправке в учетную запись хранения. Эти переменные могут помочь в следующих дальнейших операциях.

    • <stg_account имя учетной записи хранения>
    • <stg_key ключ доступа учетной записи хранения>
    • <stg_container имя контейнера учетной записи хранения>
    • stg_prefix $[format('{0:yyyMMDdHmm}', pipeline.startTime)]
    • stg_url https://$(stg_account).blob.core.windows.net/$(stg_container)
    • <cscfg_name имя файла конфигурации>
    • <cspkg_name имя файла пакета>
    • url_cscfg $(stg_url)/$(stg_prefix)/$(cscfg_name)
    • url_cspkg $(stg_url)/$(stg_prefix)/$(cspkg_name)

    Снимок экрана: переменные.

  2. Используйте задачу сборки Visual Studio для создания задачи на основе файла решения проекта облачной службы и вывода его в локальный путь к агенту. Дополнительные сведения см. в разделе MSBuild.

    Снимок экрана: пример файла решения для проекта облачной службы.

    Ниже приведен файл YAML для создания проекта:

    # 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. Используйте задачу конвейера AzureFileCopy@4 — задача копирования файлов Azure версии 4 для отправки файлов конфигурации, определения и пакета облачной службы. Задача поддерживает проверку подлинности на основе идентификатора Microsoft Entra. Проверку подлинности можно выполнить с помощью субъекта-службы и управляемого удостоверения. Вы можете назначить участника разрешений и участника данных BLOB-объектов хранилища, чтобы разрешить доступ к подключениям к службе.

    Найдите принцип службы в параметрах проекта:

    Снимок экрана: пример типа подключения службы.

    Снимок экрана: назначения ролей.

    Версия YAML копирования файлов:

    # 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
    

    После копирования файла вы увидите скопированный пакет облачной службы в хранилище.

    Снимок экрана: пакет облачной службы, скопированный в хранилище.

  4. Используйте задачу конвейера Azure PowerShell для создания временного маркера SAS в течение пяти минут.

    # 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. Используйте задачу конвейера шаблона ARM для развертывания развертывания Облачные службы (расширенная поддержка). Чтобы получить пример шаблона, см. статью 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. После завершения развертывания вы увидите следующие результаты задачи и облачную службу с тегом. Вы можете изменить код и конфигурацию, чтобы обновить текущее развертывание.

    Снимок экрана: пример результата задачи.

В портал Azure можно найти результаты развертывания в группе ресурсов облачной службы.

Снимок экрана: пример результата развертывания.

Метка развертывания должна совпадать с меткой времени, определенной вами.

Снимок экрана: пример метки развертывания.

Свяжитесь с нами для получения помощи

Если у вас есть вопросы или вам нужна помощь, создайте запрос в службу поддержки или обратитесь за поддержкой сообщества Azure. Вы также можете отправить отзыв о продукте в сообщество отзывов Azure.