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
- Potoki i zadania wypełniają zmienne w celu dostosowania uwierzytelniania federacyjnego tożsamości obciążenia
- Ponawianie prób dla zadań serwera
- Zadania korzystające z wersji modułu uruchamiającego węzła end-of-life do wykonywania ostrzeżeń emitujących
- DockerCompose0 używa narzędzia Docker Compose w wersji 2 w trybie zgodności w wersji 1
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.
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 retryCountOnTaskFailure
usł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>
zadaniaTaskName
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ę.
Możesz również uzyskać porady i odpowiedzi na pytania społeczności w witrynie Stack Overflow.