Azure Pipelines - Sprint 240-update
Functies
- Toegang krijgen tot Azure Service Bus vanuit pijplijnen met behulp van Microsoft Entra ID-verificatie
- Pijplijnen en taken vullen variabelen in om federatieverificatie van workloadidentiteit aan te passen
- Nieuwe pogingen voor servertaken
- Taken die een end-of-life Node runner-versie gebruiken om waarschuwingen uit te voeren
- DockerCompose0 maakt gebruik van Docker Compose v2 in de compatibiliteitsmodus v1
Toegang krijgen tot Azure Service Bus vanuit pijplijnen met behulp van Microsoft Entra ID-verificatie
U kunt nu Microsoft Entra ID-verificatie gebruiken voor toegang tot Azure Service Bus vanuit Azure Pipelines. Hierdoor kunt u profiteren van workloadidentiteitsfederatie om geheimenbeheer en Azure RBAC te verwijderen voor fijnmazig toegangsbeheer.
Identiteiten die toegang hebben tot Azure Service Bus, moeten een van de ingebouwde Azure-rollen krijgen voor Azure Service Bus op de Service Bus die wordt geopend.
PublishToAzureServiceBus@2 taak
De nieuwe PublishToAzureServiceBus@2-taken kunnen worden geconfigureerd met behulp van een Azure-serviceverbinding. Maak een Azure-serviceverbinding en vul de serviceBusQueueName
en serviceBusNamespace
eigenschappen van de nieuwe taak in:
- task: PublishToAzureServiceBus@2
inputs:
azureSubscription: my-azure-service-connection
serviceBusQueueName: my-service-bus-queue
serviceBusNamespace: my-service-bus-namespace
useDataContractSerializer: false
messageBody: |
{
"foo": "bar"
}
Servertaken
Aangepaste servertaken (zonder agent) die gebruikmaken van ServiceBus
uitvoering, kunnen een Azure-serviceverbinding opgeven als EndpointId
en weglaten ConnectionString
. Zie Het ontwerpen van servertaken.
Pijplijnen en taken vullen variabelen in om federatieverificatie van workloadidentiteit aan te passen
Het REST API-eindpunt voor het aanvragen van OIDC-tokens is nu beschikbaar in de System.OidcRequestUri
pijplijnvariabele. Taakontwikkelaars kunnen deze variabele gebruiken om een idToken te genereren voor verificatie met Entra-id.
Als u Marketplace-taken of aangepaste taken gebruikt om te implementeren in Azure, moet u er rekening mee houden dat deze taken mogelijk nog geen ondersteuning bieden voor federatie van workloadidentiteiten. We raden taakontwikkelaars aan om workloadidentiteitsfederatie in te schakelen om de beveiligingsmaatregelen te verbeteren.
Taken die invoer connectedService:AzureRM
in task.json kunnen worden bijgewerkt om de federatie van workloadidentiteiten te ondersteunen door de volgende stappen uit te voeren:
- Gebruik de Oidctoken REST API om een idToken aan te vragen (pijl 1 in het bovenstaande diagram).
- Exchange het idToken voor een toegangstoken met behulp van de federatieve referentiestroom van de OAuth-API, waarbij het idToken wordt opgegeven als
client_assertion
(pijlen 2 & 4 in het bovenstaande diagram);
of: - Voor taken die fungeren als een wrapper rond een hulpprogramma dat verificatie zelf uitvoert, gebruikt u de verificatiemethode van de hulpprogramma's om het federatieve token op te geven.
Knooppunttaken kunnen gebruikmaken van het npm-pakket azure-pipelines-tasks-artifacts om het idToken te verkrijgen. Raadpleeg het codevoorbeeld voor implementatiedetails.
Een nieuw idToken aanvragen
Met de System.OidcRequestUri
pijplijnvariabele en AZURESUBSCRIPTION_SERVICE_CONNECTION_ID
omgevingsvariabele die in de AzureCLI@2
taken AzurePowerShell@5
worden weergegeven, kunnen auteurs van pijplijnen verifiëren vanuit hun eigen script:
PowerShell Az
- task: AzurePowerShell@5
inputs:
azureSubscription: 'my-azure-subscription'
scriptType: inlineScript
inline: |
# Request fresh idToken
Invoke-RestMethod -Headers @{
Authorization = "Bearer $(System.AccessToken)"
'Content-Type' = 'application/json'
} `
-Uri "${env:SYSTEM_OIDCREQUESTURI}?api-version=7.1&serviceConnectionId=${env:AZURESUBSCRIPTION_SERVICE_CONNECTION_ID}" `
-Method Post `
| Select-Object -ExpandProperty oidcToken
| Set-Variable idToken
# Fetch current context
$azContext = Get-AzContext
# Start new Az session
Connect-AzAccount -ApplicationId $azContext.Account.Id `
-TenantId $azContext.Tenant.Id `
-SubscriptionId $azContext.Subscription.Id `
-FederatedToken $idToken
Azure-CLI
- task: AzureCLI@2
inputs:
addSpnToEnvironment: true
azureSubscription: 'my-azure-subscription'
scriptType: bash
scriptLocation: inlineScript
inlineScript: |
# Request fresh idToken
OIDC_REQUEST_URL="${SYSTEM_OIDCREQUESTURI}?api-version=7.1&serviceConnectionId=${AZURESUBSCRIPTION_SERVICE_CONNECTION_ID}"
ARM_OIDC_TOKEN=$(curl -s -H "Content-Length: 0" -H "Content-Type: application/json" -H "Authorization: Bearer $(System.AccessToken)" -X POST $OIDC_REQUEST_URL | jq -r '.oidcToken')
# Save subscription context
ARM_SUBSCRIPTION_ID=$(az account show --query id -o tsv)
# New az-cli session
az login --service-principal -u $servicePrincipalId --tenant $tenantId --allow-no-subscriptions --federated-token $ARM_OIDC_TOKEN
az account set --subscription $ARM_SUBSCRIPTION_ID
Nieuwe pogingen voor servertaken
Servertaken die externe systemen aanroepen, zoals AzureFunction
of, kunnen af en InvokeRESTAPI
toe mislukken vanwege tijdelijke fouten, zoals uitputting van rekenresources. Voorheen zouden dergelijke fouten ertoe leiden dat de hele taak en mogelijk de pijplijn mislukken.
Ter verbetering van de tolerantie tegen tijdelijke fouten hebben we ondersteuning geïntroduceerd voor de retryCountOnTaskFailure
eigenschap in servertaken. Stel dat u de volgende YAML-code in uw pijplijn hebt:
- stage: deploy
jobs:
- job:
pool: server
steps:
- task: AzureFunction@1
retryCountOnTaskFailure: 2
inputs:
function: 'https://api.fabrikamfiber.com'
key: $(functionKey)
method: 'POST'
waitForCompletion: 'false'
Als https://api.fabrikamfiber.com
er een tijdelijke fout optreedt, probeert Azure Pipelines de aanvraag maximaal drie keer opnieuw (de eerste poging plus twee nieuwe pogingen die zijn opgegeven door retryCountOnTaskFailure
). Elke nieuwe poging omvat een toenemende wachttijd. Het maximum aantal toegestane nieuwe pogingen is 10.
Deze retryCountOnTaskFailure
is niet beschikbaar voor de ManualValidation
taak en andere taken waarvoor geen externe systeemaanroepen nodig zijn.
Taken die een end-of-life Node runner-versie gebruiken om waarschuwingen uit te voeren
Pijplijntaken die afhankelijk zijn van een knooppuntversie die niet meer worden onderhouden , ontvangen waarschuwingen:
De taakversie
TaskName
<version>
is afhankelijk van een knooppuntversie (10) die het einde van de levensduur heeft. Neem contact op met de eigenaar van de extensie voor een bijgewerkte versie van de taak. Taakonderhouders moeten richtlijnen voor knooppuntupgrades bekijken: https://aka.ms/node-runner-guidance
Als u deze waarschuwingen wilt onderdrukken, kunt u een omgevings- of pijplijnvariabele instellen op het niveau van de pijplijn (taak) of op taakniveau. Voorbeeld:
variables:
AZP_AGENT_CHECK_IF_TASK_NODE_RUNNER_IS_DEPRECATED: false
DockerCompose@0 gebruikt Docker Compose v2 in de compatibiliteitsmodus v1
Docker Compose v1 zal het einde van de levensduur bereiken en wordt verwijderd van gehoste agents op 24 juli 2024. We hebben de DockerCompose@0 taak bijgewerkt voor het gebruik van Docker Compose v2 in de v1-compatibiliteitsmodus als Docker Compose v1 niet beschikbaar is op de agent.
In de compatibiliteitsmodus worden echter niet alle compatibiliteitsproblemen opgelost. Zie Migreren naar Compose V2. Sommige gebruikers hebben meer tijd nodig om hun Docker Compose-projecten bij te werken voor compatibiliteit met Docker Compose v2. In die gevallen volgt u deze instructies om de DockerComposeV0-taak te gebruiken met docker-compose v1.
OPMERKING: deze handleiding is gebaseerd op de zelfstandige documentatie voor Install Compose
Docker-compose v1 gebruiken in Windows
Voeg de PowerShell-stap toe aan uw pijplijn om docker-Compose v1.29.2 te downloaden en te gebruiken met de DockerComposeV0-taak in Windows:
variables:
dockerComposePath: C:\docker-compose
steps:
- powershell: |
mkdir -f $(dockerComposePath)
# GitHub now requires TLS1.2. In PowerShell, run the following
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Start-BitsTransfer -Source "https://github.com/docker/compose/releases/download/1.29.1/docker-compose-windows-x86_64.exe" -Destination $(dockerComposePath)\docker-compose.exe
displayName: Download docker-compose
- task: DockerCompose@0
inputs:
containerregistrytype: 'Azure Container Registry'
dockerComposeFile: '**/docker-compose.yml'
action: 'Run a Docker Compose command'
dockerComposeCommand: 'run'
dockerComposePath: $(dockerComposePath)\docker-compose.exe
docker-compose v1 gebruiken in Linux
Voeg de bash-stap toe aan uw pijplijn om Docker-Compose v1.29.2 te downloaden en te gebruiken met de DockerComposeV0-taak op Linux:
variables:
dockerComposePath: /tmp/docker-compose
steps:
- bash: |
sudo mkdir $(dockerComposePath)
sudo curl -SL https://github.com/docker/compose/releases/download/1.29.2/docker-compose-linux-x86_64 -o $(dockerComposePath)/docker-compose
sudo chmod 755 $(dockerComposePath)/docker-compose
displayName: Download docker-compose
- task: DockerCompose@0
inputs:
containerregistrytype: 'Azure Container Registry'
dockerComposeFile: $(Build.SourcesDirectory)/DockerComposeV0/docker-compose.yml
action: 'Run a Docker Compose command'
dockerComposeCommand: 'run'
dockerComposePath: $(dockerComposePath)/docker-compose
Volgende stappen
Notitie
Deze functies worden de komende twee tot drie weken uitgerold.
Ga naar Azure DevOps en kijk eens.
Feedback geven
We horen graag wat u van deze functies vindt. Gebruik het Help-menu om een probleem te melden of een suggestie op te geven.
U kunt ook advies krijgen en uw vragen beantwoorden door de community op Stack Overflow.