Udostępnij za pośrednictwem


Azure Pipelines — aktualizacja przebiegu 240

Funkcje

Uzyskiwanie dostępu do usługi Azure Service Bus z potoków przy użyciu uwierzytelniania identyfikatora Entra firmy Microsoft

Teraz możesz użyć uwierzytelniania identyfikatora Entra firmy Microsoft, aby uzyskać dostęp do usługi Azure Service Bus z poziomu usługi Azure Pipelines. Dzięki temu można korzystać z federacji tożsamości obciążenia, aby usunąć zarządzanie wpisami tajnymi i kontrolę dostępu na podstawie ról platformy Azure na potrzeby szczegółowej kontroli dostępu.

Tożsamości, które uzyskują dostęp do usługi Azure Service Bus, muszą mieć dostęp do jednej z wbudowanych ról platformy Azure dla usługi Azure Service Bus w usłudze Service Bus .

PublishToAzureServiceBus@2 zadanie

Nowe zadania PublishToAzureServiceBus@2 można skonfigurować przy użyciu połączenia usługi platformy Azure. Utwórz połączenie usługi platformy Azure i wypełnij serviceBusQueueName właściwości i serviceBusNamespace nowego zadania:

- task: PublishToAzureServiceBus@2
  inputs:
    azureSubscription: my-azure-service-connection
    serviceBusQueueName: my-service-bus-queue
    serviceBusNamespace: my-service-bus-namespace
    useDataContractSerializer: false
    messageBody: |
      {
        "foo": "bar"
      }
Zadania serwera

Zadania serwera niestandardowego (bez agenta) korzystające z ServiceBus wykonywania mogą określać połączenie z usługą platformy Azure jako EndpointId i pomijać ConnectionString. Zobacz Tworzenie zadań serwera.

Potoki i zadania wypełniają zmienne w celu dostosowania uwierzytelniania federacyjnego tożsamości obciążenia

Punkt końcowy interfejsu API REST do żądania tokenów OIDC jest teraz dostępny w zmiennej potoku System.OidcRequestUri . Deweloperzy zadań mogą wykorzystać tę zmienną do wygenerowania identyfikatora idToken na potrzeby uwierzytelniania przy użyciu identyfikatora Entra.

Jeśli używasz zadań witryny Marketplace lub zadań niestandardowych do wdrożenia na platformie Azure, pamiętaj, że te zadania mogą jeszcze nie obsługiwać federacji tożsamości obciążenia. Zalecamy deweloperom zadań włączenie federacji tożsamości obciążenia w celu poprawy środków bezpieczeństwa.

Zrzut ekranu przedstawiający współpracę oidc.

Zadania, które przyjmują connectedService:AzureRM dane wejściowe w task.json , można zaktualizować w celu obsługi federacji tożsamości obciążenia, wykonując następujące kroki:

  • Użyj interfejsu API REST Oidctoken, aby zażądać tokenu idToken (strzałka 1 na powyższym diagramie).
  • Wymień token idToken na token dostępu przy użyciu przepływu poświadczeń federacyjnych interfejsu API OAuth, określając identyfikator IdToken jako client_assertion (strzałki 2 i 4 na powyższym diagramie);
    or:
  • W przypadku zadań, które działają jako otoka narzędzia wykonującego uwierzytelnianie, użyj metody uwierzytelniania narzędzi, aby określić token federacyjny.

Zadania węzła mogą używać pakietu npm azure-pipelines-tasks-artifacts-common w celu uzyskania identyfikatora IdToken. Zapoznaj się z przykładem kodu, aby uzyskać szczegółowe informacje o implementacji.

Żądanie nowego identyfikatora

Zmienna potoku i AZURESUBSCRIPTION_SERVICE_CONNECTION_ID zmienna System.OidcRequestUri środowiskowa uwidoczniona w zadaniach AzureCLI@2 i AzurePowerShell@5 umożliwiają autorom potoków uwierzytelnianie z własnego skryptu:

Moduł Az programu PowerShell
- 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
Interfejs wiersza polecenia platformy Azure
- 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

Ponawianie prób dla zadań serwera

Zadania serwera, które nazywają systemy zewnętrzne, takie jak AzureFunction lub InvokeRESTAPI, mogą czasami zakończyć się niepowodzeniem z powodu przejściowych błędów, takich jak wyczerpanie zasobów obliczeniowych. Wcześniej takie błędy spowodowały niepowodzenie całego zadania i potencjalnie potoku.

Aby zwiększyć odporność na błędy przejściowe, wprowadziliśmy obsługę retryCountOnTaskFailure właściwości w zadaniach serwera. Załóżmy, że w potoku masz następujący kod YAML:

- stage: deploy
  jobs:
  - job:
    pool: server
    steps:
    - task: AzureFunction@1
      retryCountOnTaskFailure: 2
      inputs:
        function: 'https://api.fabrikamfiber.com'
        key: $(functionKey)
        method: 'POST'
        waitForCompletion: 'false'

Jeśli https://api.fabrikamfiber.com wystąpi błąd przejściowy, usługa Azure Pipelines ponowi próbę żądania maksymalnie trzy razy (próba początkowa i dwie próby określone przez retryCountOnTaskFailureusługę ). Każda ponowna próba obejmuje rosnący okres oczekiwania. Maksymalna dozwolona liczba ponownych prób wynosi 10.

Element retryCountOnTaskFailure nie jest dostępny dla ManualValidation zadania i innych zadań, które nie obejmują wywołań systemu zewnętrznego.

Zadania korzystające z wersji modułu uruchamiającego węzła end-of-life do wykonywania ostrzeżeń emitujących

Zadania potoku, które korzystają z wersji węzła, nie będą już obsługiwane , będą otrzymywać ostrzeżenia:

Wersja <version> zadania TaskName jest zależna od wersji węzła (10), która jest zakończona. Skontaktuj się z właścicielem rozszerzenia, aby uzyskać zaktualizowaną wersję zadania. Osoby odpowiedzialne za zadania powinny zapoznać się ze wskazówkami dotyczącymi uaktualniania węzła: https://aka.ms/node-runner-guidance

Aby pominąć te ostrzeżenia, można ustawić zmienną środowiskową lub potokową na poziomie potoku (zadania) lub zadania. Na przykład:

variables:
  AZP_AGENT_CHECK_IF_TASK_NODE_RUNNER_IS_DEPRECATED: false

DockerCompose@0 używa narzędzia Docker Compose w wersji 2 w trybie zgodności w wersji 1

Program Docker Compose w wersji 1 osiągnie zakończenie działania i zostanie usunięty z hostowanych agentów 24 lipca 2024 r. Zaktualizowaliśmy zadanie DockerCompose@0 , aby używać narzędzia Docker Compose w wersji 2 w trybie zgodności w wersji 1, jeśli program Docker Compose v1 nie jest dostępny w agencie.

Jednak tryb zgodności nie rozwiązuje wszystkich problemów ze zgodnością. Zobacz Migrowanie do Compose w wersji 2. Niektórzy użytkownicy będą potrzebować więcej czasu na zaktualizowanie projektów Docker Compose pod kątem zgodności z Docker Compose w wersji 2. W takich przypadkach postępuj zgodnie z tymi instrukcjami, aby użyć zadania DockerComposeV0 z programem docker-compose v1.

UWAGA: ten przewodnik jest oparty na dokumentacji autonomicznej instalacji narzędzia Compose

Korzystanie z narzędzia docker-compose w wersji 1 w systemie Windows

Dodaj krok programu PowerShell do potoku, aby pobrać narzędzie docker-Compose w wersji 1.29.2 i użyć go z zadaniem DockerComposeV0 w systemie 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

Korzystanie z narzędzia docker-compose w wersji 1 w systemie Linux

Dodaj krok powłoki bash do potoku, aby pobrać narzędzie Docker-Compose w wersji 1.29.2 i użyć go z zadaniem DockerComposeV0 w systemie 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

Następne kroki

Uwaga

Te funkcje będą wdrażane w ciągu najbliższych dwóch do trzech tygodni.

Przejdź do usługi Azure DevOps i przyjrzyj się.

Jak przekazać opinię

Chcielibyśmy usłyszeć, co myślisz o tych funkcjach. Użyj menu Pomocy, aby zgłosić problem lub podać sugestię.

Utwórz sugestię

Możesz również uzyskać porady i odpowiedzi na pytania społeczności w witrynie Stack Overflow.