Dela via


Azure Pipelines – Sprint 240-uppdatering

Funktioner

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.

Skärmbild av oidc-samarbete.

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.

Ge ett förslag

Du kan också få råd och dina frågor som besvaras av communityn på Stack Overflow.