Partager via


Comment utiliser Azure DevOps pour publier des Services cloud (support étendu)

Cet article fournit des conseils sur l’utilisation du modèle Azure Resource Manager (ARM) pour créer ou mettre à jour le déploiement d’Azure Services cloud (support étendu).

Background

Azure Services cloud (support étendu) est un nouveau modèle de déploiement ARM pour Azure Services cloud. Azure Cloud Services (support étendu) a pour principal avantage de fournir une résilience régionale ainsi qu’une parité des fonctionnalités avec Azure Cloud Services déployé à l’aide d’Azure Service Manager. Il offre également certaines fonctionnalités ARM telles que l’accès et le contrôle en fonction du rôle (RBAC), les balises, les stratégies et prend en charge les modèles de déploiement.

Pour les Services cloud classiques, la tâche de pipeline intégrée Azure DevOps AzureCloudPowerShellDeployment@1 peut vous aider à gérer facilement la progression ci/CD. Mais la tâche de Services cloud (support étendu) n’est pas encore prête.

Principaux points de publication Services cloud (support étendu)

  1. Définissez certaines variables pour le compte de stockage afin de préparer le déploiement du modèle ARM.
  2. Utilisez la tâche VSBuild@1 - Visual Studio build v1 pour générer le projet de service cloud et générer le fichier de package de service cloud ou le fichier de configuration.
  3. Utilisez la tâche intégrée AzureFileCopy@5 - Copie de fichiers Azure v5 pour charger un répertoire de build dans le stockage d’objets blob.
  4. Utilisez la référence de stockage, y compris la clé d’accès pour générer un jeton SAP par AzurePowerShell@5 - Tâche Azure PowerShell v5, et générez le jeton dans une variable qui sera utilisée dans la tâche suivante.
  5. Utilisez la sortie de la tâche précédente et la valeur de la tâche AzureResourceManagerTemplateDeployment@3 - Déploiement de modèle ARM v3.

Capture d’écran des pipelines exécutés récemment.

Étapes de publication de Services cloud (support étendu)

  1. Créez un pipeline de démarrage et préparez-vous à charger sur le compte de stockage. Ces variables peuvent vous aider à effectuer d’autres opérations suivantes.

    • <stg_account le nom du compte de stockage>
    • <stg_key clé d’accès du compte de stockage>
    • <nom du conteneur stg_container du compte de stockage>
    • stg_prefix $[format('{0 :yyyyMMddHHmm}', pipeline.startTime)]
    • stg_url https://$(stg_account).blob.core.windows.net/$(stg_container)
    • <cscfg_name le nom du fichier de configuration>
    • <cspkg_name le nom du fichier de package>
    • url_cscfg $(stg_url)/$(stg_prefix)/$(cscfg_name)
    • url_cspkg $(stg_url)/$(stg_prefix)/$(cspkg_name)

    Capture d’écran des variables.

  2. Utilisez la tâche de génération Visual Studio pour générer votre tâche en fonction du fichier de solution de votre projet de service cloud et générez-la vers un chemin local sur l’agent. Pour plus d’informations, consultez MSBuild.

    Capture d’écran d’un exemple de fichier de solution de projet de service cloud.

    Voici le fichier YAML pour générer un projet :

    # 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. Utilisez la tâche de pipeline AzureFileCopy@4 - Tâche de copie de fichiers Azure v4 pour charger les fichiers de configuration, de définition et de package du service cloud. La tâche prend en charge l’authentification basée sur l’ID Microsoft Entra. L’authentification peut être effectuée à l’aide d’un principal de service et d’une identité managée. Vous pouvez attribuer l’autorisation Contributeur et Contributeur aux données Blob de stockage pour autoriser l’accès aux connexions de service.

    Recherchez le principe de service dans les paramètres du projet :

    Capture d’écran d’un exemple de type de connexion de service.

    Capture d’écran des attributions de rôles.

    Version YAML de la copie de fichiers :

    # 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
    

    Après avoir copié le fichier, vous verrez le package de service cloud copié dans le stockage.

    Capture d’écran d’un package de service cloud copié dans le stockage.

  4. Utilisez la tâche de pipeline Azure PowerShell pour générer un jeton SAP temporaire pendant cinq minutes.

    # 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. Utilisez la tâche de pipeline de modèle ARM pour déployer le déploiement Services cloud (support étendu). Pour obtenir l’exemple de modèle, consultez 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. Une fois le déploiement terminé, vous devez voir les résultats de tâche suivants et le service cloud avec la balise. Vous pouvez modifier le code et la configuration pour mettre à jour le déploiement actuel.

    Capture d’écran d’un exemple de résultat de tâche.

Dans le Portail Azure, vous trouverez les résultats de déploiement dans le groupe de ressources de service cloud.

Capture d’écran d’un exemple de résultat de déploiement.

L’étiquette de déploiement doit être identique à l’horodatage que vous avez défini.

Capture d’écran d’un exemple d’étiquette de déploiement.

Contactez-nous pour obtenir de l’aide

Pour toute demande ou assistance, créez une demande de support ou posez une question au support de la communauté Azure. Vous pouvez également soumettre des commentaires sur les produits à la communauté de commentaires Azure.