Как использовать Azure DevOps для публикации Облачные службы (расширенная поддержка)
В этой статье содержатся рекомендации по использованию шаблона Azure Resource Manager (ARM) для создания или обновления развертывания Azure Облачные службы (расширенная поддержка).
Общие сведения
Azure Облачные службы (расширенная поддержка) — это новая модель развертывания на основе ARM для Azure Облачные службы. Облачные службы (расширенная поддержка) обладают основным преимуществом, заключающимся в обеспечении региональной устойчивости и равенства функций с Облачными службами Azure, развернутыми с помощью Azure Service Manager. Он также предлагает некоторые возможности ARM, такие как доступ и управление на основе ролей (RBAC), теги, политики и поддерживает шаблоны развертывания.
Для классических Облачные службы встроенная задача конвейера Azure DevOps AzureCloudPowerShellDeployment@1 может легко управлять ходом выполнения CI/CD. Но задача для Облачные службы (расширенная поддержка) еще не готова.
Основные моменты публикации Облачные службы (расширенная поддержка)
- Определите некоторые переменные для учетной записи хранения для подготовки к развертыванию шаблона ARM.
- Используйте задачу VSBuild@1 сборки Visual Studio версии 1 для создания проекта облачной службы и вывода файла пакета облачной службы или файла конфигурации.
- Используйте встроенную AzureFileCopy@5 — задачу копирования файлов Azure версии 5 для отправки каталога сборки в хранилище BLOB-объектов.
- Используйте ссылку на хранилище, включая ключ доступа для создания маркера SAS, AzurePowerShell@5 — задача Azure PowerShell версии 5 и вывод маркера в переменную, которая будет использоваться в следующей задаче.
- Используйте выходные данные предыдущей задачи и значение задачи AzureResourceManagerTemplateDeployment@3 — развертывание шаблона ARM версии 3.
Шаги по публикации Облачные службы (расширенная поддержка)
Создайте начальный конвейер и подготовьте его к отправке в учетную запись хранения. Эти переменные могут помочь в следующих дальнейших операциях.
- <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)
Используйте задачу сборки 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)'
Используйте задачу конвейера 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
После копирования файла вы увидите скопированный пакет облачной службы в хранилище.
Используйте задачу конвейера 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'
Используйте задачу конвейера шаблона 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'
После завершения развертывания вы увидите следующие результаты задачи и облачную службу с тегом. Вы можете изменить код и конфигурацию, чтобы обновить текущее развертывание.
В портал Azure можно найти результаты развертывания в группе ресурсов облачной службы.
Метка развертывания должна совпадать с меткой времени, определенной вами.
Свяжитесь с нами для получения помощи
Если у вас есть вопросы или вам нужна помощь, создайте запрос в службу поддержки или обратитесь за поддержкой сообщества Azure. Вы также можете отправить отзыв о продукте в сообщество отзывов Azure.