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

Contexte

Azure Services cloud (support étendu) est un nouveau modèle de déploiement arm pour Azure Services cloud. Services cloud (support étendu) présente le principal avantage de fournir une résilience régionale, ainsi que la parité des fonctionnalités avec Azure Services cloud déployées à 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 étiquettes, les stratégies et prend en charge les modèles de déploiement.

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

Principaux points de publication Services cloud (support étendu)

  1. Définissez des 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 SAS par AzurePowerShell@5 - Azure PowerShell tâche v5 et générer 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 récemment exécutés.

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

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

    • <stg_account le nom du compte de stockage>
    • <stg_key clé d’accès du compte de stockage>
    • <stg_container nom du conteneur du compte de stockage>
    • stg_prefix $[format('{0 :yyyyyMMddHHmm}', 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 de votre fichier de solution de projet de service cloud et la générer dans un chemin d’accès 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 Microsoft Entra ID. L’authentification peut être effectuée à l’aide d’un principal de service et d’une identité managée. Vous pouvez attribuer les autorisations Contributeur et Contributeur aux données Blob du 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.

    La 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 la tâche suivants et le service cloud avec l’étiquette . 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 du déploiement dans le groupe de ressources du 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.