Delen via


Azure Pipelines - Sprint 240-update

Functies

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.

Schermopname van oidc-samenwerking.

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

Een suggestie doen

U kunt ook advies krijgen en uw vragen beantwoorden door de community op Stack Overflow.