Azure Pipelines – Sprint 240-uppdatering
Funktioner
- Få åtkomst till Azure Service Bus från pipelines med hjälp av Microsoft Entra-ID-autentisering
- Pipelines och uppgifter fyller i variabler för att anpassa autentisering för arbetsbelastningsidentitetsfederation
- Återförsök för serveruppgifter
- Uppgifter som använder en end-of-life Node runner-version för att köra avge varningar
- DockerCompose0 använder Docker Compose v2 i v1-kompatibilitetsläge
Få åtkomst till Azure Service Bus från pipelines med hjälp av Microsoft Entra-ID-autentisering
Nu kan du använda Microsoft Entra ID-autentisering för att få åtkomst till Azure Service Bus från Azure Pipelines. På så sätt kan du dra nytta av arbetsbelastningsidentitetsfederationen för att ta bort hantering av hemligheter och Azure RBAC för detaljerad åtkomstkontroll.
Identiteter som har åtkomst till Azure Service Bus måste beviljas en av de inbyggda Azure-rollerna för Azure Service Bus på servicebussen som nås.
PublishToAzureServiceBus@2 uppgift
De nya PublishToAzureServiceBus@2 uppgifterna kan konfigureras med hjälp av en Azure-tjänstanslutning. Skapa en Azure-tjänstanslutning och fyll i serviceBusQueueName
egenskaperna och serviceBusNamespace
för den nya uppgiften:
- task: PublishToAzureServiceBus@2
inputs:
azureSubscription: my-azure-service-connection
serviceBusQueueName: my-service-bus-queue
serviceBusNamespace: my-service-bus-namespace
useDataContractSerializer: false
messageBody: |
{
"foo": "bar"
}
Serveruppgifter
Anpassade serveruppgifter (agentlösa) som använder ServiceBus
körning kan ange en Azure-tjänstanslutning som EndpointId
och utelämna ConnectionString
. Se Redigering av serveraktivitet.
Pipelines och uppgifter fyller i variabler för att anpassa autentisering för arbetsbelastningsidentitetsfederation
REST API-slutpunkten för att begära OIDC-token är nu tillgänglig i System.OidcRequestUri
pipelinevariabeln. Uppgiftsutvecklare kan använda den här variabeln för att generera en idToken för autentisering med Entra-ID.
Om du använder Marketplace-uppgifter eller anpassade uppgifter för att distribuera till Azure bör du vara medveten om att dessa uppgifter kanske inte stöder arbetsbelastningsidentitetsfederation ännu. Vi rekommenderar uppgiftsutvecklare att aktivera arbetsbelastningsidentitetsfederation för att förbättra säkerhetsåtgärderna.
Uppgifter som tar in indata connectedService:AzureRM
i task.json kan uppdateras för att stödja arbetsbelastningsidentitetsfederation genom att följa dessa steg:
- Använd rest-API:et för Oidctoken för att begära en idToken (pil 1 i diagrammet ovan).
- Byt idToken mot en åtkomsttoken med hjälp av det federerade autentiseringsflödet i OAuth-API:et och ange idToken som
client_assertion
(pilarna 2 & 4 i diagrammet ovan);
eller: - För uppgifter som fungerar som omslutning runt ett verktyg som utför själva autentiseringen använder du verktygens autentiseringsmetod för att ange den federerade token.
Node-uppgifter kan använda det vanliga npm-paketet azure-pipelines-tasks-artifacts-common för att hämta idToken. Se kodexemplet för implementeringsinformation.
Begära en ny idToken
Pipelinevariabeln System.OidcRequestUri
och AZURESUBSCRIPTION_SERVICE_CONNECTION_ID
miljövariabeln som exponeras i aktiviteterna och AzurePowerShell@5
gör det möjligt för pipelineförfattare att autentisera AzureCLI@2
från sitt eget skript:
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
Återförsök för serveruppgifter
Serveruppgifter som anropar externa system, till exempel AzureFunction
eller InvokeRESTAPI
, kan ibland misslyckas på grund av tillfälliga fel som överbelastning av beräkningsresurser. Tidigare skulle sådana fel göra att hela jobbet, och eventuellt pipelinen, misslyckas.
För att förbättra motståndskraften mot tillfälliga fel har vi infört stöd för retryCountOnTaskFailure
egenskapen i serveruppgifter. Anta att du har följande YAML-kod i pipelinen:
- stage: deploy
jobs:
- job:
pool: server
steps:
- task: AzureFunction@1
retryCountOnTaskFailure: 2
inputs:
function: 'https://api.fabrikamfiber.com'
key: $(functionKey)
method: 'POST'
waitForCompletion: 'false'
Om https://api.fabrikamfiber.com
det uppstår ett tillfälligt fel försöker Azure Pipelines begäran igen upp till tre gånger (det första försöket plus två återförsök som anges av retryCountOnTaskFailure
). Varje återförsök innehåller en ökande väntetid. Det maximala antalet återförsök som tillåts är 10.
retryCountOnTaskFailure
Är inte tillgängligt för uppgiften ManualValidation
och andra uppgifter som inte omfattar externa systemanrop.
Uppgifter som använder en end-of-life Node runner-version för att köra avge varningar
Pipelineuppgifter som förlitar sig på en nodversion som inte längre underhålls börjar ta emot varningar:
Uppgiftsversionen
TaskName
<version>
är beroende av en Node-version (10) som är slutpunkt. Kontakta tilläggsägaren om du vill ha en uppdaterad version av uppgiften. Uppgiftsunderhållare bör gå igenom vägledningen för noduppgradering: https://aka.ms/node-runner-guidance
Om du vill ignorera dessa varningar kan du ange en miljö- eller pipelinevariabel på antingen pipeline-nivån (jobbet) eller aktivitetsnivån. Till exempel:
variables:
AZP_AGENT_CHECK_IF_TASK_NODE_RUNNER_IS_DEPRECATED: false
DockerCompose@0 använder Docker Compose v2 i v1-kompatibilitetsläge
Docker Compose v1 når sin livslängd och tas bort från värdbaserade agenter 24 juli 2024. Vi har uppdaterat DockerCompose@0 uppgift för att använda Docker Compose v2 i v1-kompatibilitetsläge om Docker Compose v1 inte är tillgängligt på agenten.
Kompatibilitetsläget löser dock inte alla kompatibilitetsproblem. Se Migrera till Skriv V2. Vissa användare behöver mer tid för att uppdatera sina Docker Compose-projekt för Docker Compose v2-kompatibilitet. I sådana fall följer du de här anvisningarna för att använda DockerComposeV0-aktiviteten med docker-compose v1.
Obs! Den här guiden baseras på fristående dokumentation om Install Compose
Använda docker-compose v1 i Windows
Lägg till powershell-steget i pipelinen för att ladda ned docker-Compose v1.29.2 och använd det med aktiviteten DockerComposeV0 i 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
Använda docker-compose v1 på Linux
Lägg till bash-steget i pipelinen för att ladda ned Docker-Compose v1.29.2 och använd det med Aktiviteten DockerComposeV0 i 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
Nästa steg
Kommentar
Dessa funktioner kommer att distribueras under de kommande två till tre veckorna.
Gå över till Azure DevOps och ta en titt.
Så här ger du feedback
Vi vill gärna höra vad du tycker om de här funktionerna. Använd hjälpmenyn för att rapportera ett problem eller ge ett förslag.
Du kan också få råd och dina frågor som besvaras av communityn på Stack Overflow.