Compartir a través de


Uso de Azure DevOps para publicar Cloud Services (soporte extendido)

En este artículo se proporcionan instrucciones sobre cómo usar la plantilla de Azure Resource Manager (ARM) para crear o actualizar la implementación de Azure Cloud Services (soporte extendido).

Fondo

Azure Cloud Services (soporte extendido) es un nuevo modelo de implementación basado en ARM para Azure Cloud Services. Cloud Services (soporte extendido) tiene la ventaja principal de proporcionar resistencia regional junto con la paridad de características con Azure Cloud Services implementado mediante Azure Service Manager. También ofrece algunas funcionalidades de ARM, como el control y el acceso basado en roles (RBAC), etiquetas, directivas y admite plantillas de implementación.

Para Cloud Services clásico, la tarea de canalización integrada de Azure DevOps AzureCloudPowerShellDeployment@1 puede ayudar a administrar fácilmente el progreso de CI/CD. Pero la tarea de Cloud Services (soporte extendido) aún no está lista.

Puntos principales para publicar Cloud Services (soporte extendido)

  1. Defina algunas variables para la cuenta de almacenamiento para prepararse para la implementación de plantillas de ARM.
  2. Use la tarea VSBuild@1: compilación v1 de Visual Studio para compilar el proyecto de servicio en la nube y generar el archivo de configuración o el archivo de paquete del servicio en la nube.
  3. Use la tarea integrada AzureFileCopy@5: copia de archivos de Azure v5 para cargar un directorio de compilación en Blob Storage.
  4. Use la referencia de almacenamiento, incluida la clave de acceso para generar un token de SAS mediante AzurePowerShell@5 tarea Azure PowerShell v5 y generar el token en una variable que se usará en la siguiente tarea.
  5. Use la salida de la tarea anterior y el valor de la tarea AzureResourceManagerTemplateDeployment@3: implementación de plantillas de ARM v3.

Captura de pantalla de las canalizaciones ejecutadas recientemente.

Pasos para publicar Cloud Services (soporte extendido)

  1. Cree una canalización de inicio y prepárese para cargarla en la cuenta de almacenamiento. Estas variables pueden ayudar con las siguientes operaciones adicionales.

    • <stg_account el nombre de la cuenta de almacenamiento>
    • <stg_key clave de acceso de la cuenta de almacenamiento>
    • <stg_container nombre de contenedor de la cuenta de almacenamiento>
    • stg_prefix $[format('{0:yyyyMMMddHHmm}', pipeline.startTime)]
    • stg_url https://$(stg_account).blob.core.windows.net/$(stg_container)
    • <cscfg_name el nombre del archivo de configuración>
    • <cspkg_name el nombre del archivo de paquete>
    • url_cscfg $(stg_url)/$(stg_prefix)/$(cscfg_name)
    • url_cspkg $(stg_url)/$(stg_prefix)/$(cspkg_name)

    Captura de pantalla de las variables.

  2. Use la tarea de compilación de Visual Studio para compilar la tarea en función del archivo de solución del proyecto de servicio en la nube y generarla en una ruta de acceso local en el agente. Para obtener más información, vea MSBuild.

    Captura de pantalla de un ejemplo de archivo de solución de proyecto de servicio en la nube.

    Este es el archivo YAML para compilar un proyecto:

    # 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 la tarea de canalización AzureFileCopy@4: tarea copia de archivos de Azure v4 para cargar los archivos de configuración, definición y paquete del servicio en la nube. La tarea admite la autenticación basada en el identificador de Microsoft Entra. La autenticación se puede realizar mediante una entidad de servicio y una identidad administrada. Puede asignar el permiso Colaborador y colaborador de datos de Storage Blob para permitir el acceso a las conexiones de servicio.

    Busque el principio de servicio en la configuración del proyecto:

    Captura de pantalla de un ejemplo de tipo de conexión de servicio.

    Captura de pantalla de las asignaciones de roles.

    La versión YAML de la copia de archivos:

    # 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
    

    Después de copiar el archivo, verá el paquete de servicio en la nube copiado en el almacenamiento.

    Captura de pantalla de un paquete de servicio en la nube que se copia en el almacenamiento.

  4. Use la tarea de canalización de Azure PowerShell para generar un token de SAS temporal durante 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 la tarea de canalización de plantillas de ARM para implementar la implementación de Cloud Services (soporte extendido). Para obtener la plantilla de ejemplo, 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. Una vez completada la implementación, debería ver los siguientes resultados de la tarea y el servicio en la nube con la etiqueta . Puede cambiar el código y la configuración para actualizar la implementación actual.

    Captura de pantalla de un ejemplo de resultado de tarea.

En Azure Portal, puede encontrar los resultados de implementación en el grupo de recursos del servicio en la nube.

Captura de pantalla de un ejemplo de resultado de implementación.

La etiqueta de implementación debe ser la misma que la marca de tiempo definida.

Captura de pantalla de un ejemplo de etiqueta de implementación.

Ponte en contacto con nosotros para obtener ayuda

Si tiene preguntas o necesita ayuda, cree una solicitud de soporte o busque consejo en la comunidad de Azure. También puede enviar comentarios sobre el producto con los comentarios de la comunidad de Azure.