Azure DevOps gebruiken om Cloud Services te publiceren (uitgebreide ondersteuning)
Dit artikel bevat richtlijnen voor het gebruik van de ARM-sjabloon (Azure Resource Manager) om de implementatie van Azure Cloud Services (uitgebreide ondersteuning) te maken of bij te werken.
Achtergrond
Azure Cloud Services (uitgebreide ondersteuning) is een nieuw arm-implementatiemodel voor Azure Cloud Services. Cloud Services (uitgebreide ondersteuning) biedt het primaire voordeel van regionale tolerantie, samen met functiepariteit met Azure Cloud Services die zijn geïmplementeerd met behulp van Azure Service Manager. Het biedt ook enkele ARM-mogelijkheden, zoals op rollen gebaseerd toegang en beheer (RBAC), tags, beleid en ondersteuning voor implementatiesjablonen.
Voor klassieke Cloud Services kan de ingebouwde Pijplijntaak van Azure DevOps AzureCloudPowerShellDeployment@1 de voortgang van CI/CD eenvoudig beheren. Maar de taak voor Cloud Services (uitgebreide ondersteuning) is nog niet gereed.
Belangrijkste punten voor het publiceren van Cloud Services (uitgebreide ondersteuning)
- Definieer enkele variabelen voor het opslagaccount om de ARM-sjabloonimplementatie voor te bereiden.
- Gebruik de taak VSBuild@1 - Visual Studio build v1 om het cloudserviceproject te bouwen en het cloudservicepakketbestand of configuratiebestand uit te voeren.
- Gebruik de ingebouwde AzureFileCopy@5 - Azure-bestandskopie v5-taak om een buildmap te uploaden naar de blobopslag.
- Gebruik de opslagverwijzing inclusief de toegangssleutel om een SAS-token te genereren door AzurePowerShell@5 - Azure PowerShell v5-taak en voer het token uit naar een variabele die in de volgende taak wordt gebruikt.
- Gebruik de uitvoer van de vorige taak en de waarde voor de AzureResourceManagerTemplateDeployment@3 - ARM-sjabloonimplementatie v3-taak.
Stappen voor het publiceren van Cloud Services (uitgebreide ondersteuning)
Maak een starterspijplijn en bereid u voor om te uploaden naar het opslagaccount. Deze variabelen kunnen helpen bij de volgende verdere bewerkingen.
- <stg_account de naam van het opslagaccount>
- <stg_key toegangssleutel van het opslagaccount>
- <stg_container containernaam van het opslagaccount>
- stg_prefix $[format('{0:yyyyMMDHmm}', pipeline.startTime)]
- stg_url
https://$(stg_account).blob.core.windows.net/$(stg_container)
- <cscfg_name de naam van het configuratiebestand>
- <cspkg_name de naam van het pakketbestand>
- url_cscfg $(stg_url)/$(stg_prefix)/$(cscfg_name)
- url_cspkg $(stg_url)/$(stg_prefix)/$(cspkg_name)
Gebruik de Build-taak van Visual Studio om uw taak te bouwen op basis van uw cloudserviceprojectoplossingsbestand en deze uit te voeren naar een lokaal pad op de agent. Zie MSBuild voor meer informatie.
Dit is het YAML-bestand voor het bouwen van een project:
# 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)'
Gebruik de pijplijntaak AzureFileCopy@4 - Azure-bestandskopie v4-taak om de configuratie, definitie en pakketbestanden van de cloudservice te uploaden. De taak ondersteunt verificatie op basis van Microsoft Entra-id. Verificatie kan worden uitgevoerd met behulp van een service-principal en beheerde identiteit. U kunt de machtiging Inzender en Inzender voor opslagblobgegevens toewijzen om de toegang tot serviceverbindingen toe te staan.
Zoek het serviceprincipe in de projectinstellingen:
De YAML-versie van File Copy:
# 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
Nadat u het bestand hebt gekopieerd, ziet u het gekopieerde cloudservicepakket in de opslag.
Gebruik de Azure PowerShell-pijplijntaak om vijf minuten een tijdelijk SAS-token te genereren.
# 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'
Gebruik de ARM-sjabloonpijplijntaak om de implementatie van Cloud Services (uitgebreide ondersteuning) te implementeren. Zie 101-cses-multirole-rdp om de voorbeeldsjabloon op te halen.
#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'
Nadat de implementatie is voltooid, ziet u de volgende taakresultaten en de cloudservice met de tag. U kunt de code en configuratie wijzigen om de huidige implementatie bij te werken.
In Azure Portal vindt u de implementatieresultaten in de resourcegroep van de cloudservice.
Het implementatielabel moet hetzelfde zijn als de tijdstempel die u hebt gedefinieerd.
Contacteer ons voor hulp
Als u vragen hebt of hulp nodig hebt, maak een ondersteuningsaanvraag of vraag de Azure-communityondersteuning. U kunt ook productfeedback verzenden naar de Azure-feedbackcommunity.