Azure Pipelines - Mise à jour sprint 240
Fonctionnalités
- Accéder à Azure Service Bus à partir de Pipelines à l’aide de l’authentification Microsoft Entra ID
- Pipelines et tâches remplissent des variables pour personnaliser l’authentification de fédération des identités de charge de travail
- Nouvelles tentatives pour les tâches serveur
- Tâches qui utilisent une version de l’exécuteur de nœud de fin de vie pour exécuter des avertissements d’émission
- DockerCompose0 utilise Docker Compose v2 en mode de compatibilité v1
Accéder à Azure Service Bus à partir de Pipelines à l’aide de l’authentification Microsoft Entra ID
Vous pouvez maintenant utiliser l’authentification Microsoft Entra ID pour accéder à Azure Service Bus à partir d’Azure Pipelines. Cela vous permet de tirer parti de la fédération des identités de charge de travail pour supprimer la gestion des secrets et Azure RBAC pour un contrôle d’accès affiné.
Les identités accédant à Azure Service Bus doivent avoir accès à l’un des rôles intégrés Azure pour Azure Service Bus sur Service Bus accessible.
tâche de PublishToAzureServiceBus@2
Les nouvelles tâches PublishToAzureServiceBus@2 peuvent être configurées à l’aide d’une connexion de service Azure. Créez une connexion de service Azure et remplissez les propriétés et serviceBusNamespace
les serviceBusQueueName
propriétés de la nouvelle tâche :
- task: PublishToAzureServiceBus@2
inputs:
azureSubscription: my-azure-service-connection
serviceBusQueueName: my-service-bus-queue
serviceBusNamespace: my-service-bus-namespace
useDataContractSerializer: false
messageBody: |
{
"foo": "bar"
}
Tâches du serveur
Les tâches de serveur personnalisé (sans agent) qui utilisent ServiceBus
l’exécution peuvent spécifier une connexion de service Azure comme EndpointId
et omettre ConnectionString
. Consultez la création de tâches serveur.
Pipelines et tâches remplissent des variables pour personnaliser l’authentification de fédération des identités de charge de travail
Le point de terminaison de l’API REST pour demander des jetons OIDC est désormais disponible dans la variable de System.OidcRequestUri
pipeline. Les développeurs de tâches peuvent tirer parti de cette variable pour générer un idToken pour l’authentification avec Entra ID.
Si vous utilisez des tâches de la Place de marché ou des tâches personnalisées à déployer sur Azure, sachez que ces tâches peuvent ne pas encore prendre en charge la fédération des identités de charge de travail. Nous recommandons aux développeurs de tâches d’activer la fédération des identités de charge de travail pour améliorer les mesures de sécurité.
Les tâches qui prennent une connectedService:AzureRM
entrée dans task.json peuvent être mises à jour pour prendre en charge la fédération des identités de charge de travail en procédant comme suit :
- Utilisez l’API REST Oidctoken pour demander un idToken (flèche 1 dans le diagramme ci-dessus).
- Échangez l’idToken pour un jeton d’accès à l’aide du flux d’informations d’identification fédéré de l’API OAuth, en spécifiant l’idToken comme
client_assertion
(flèches 2 et 4 dans le diagramme ci-dessus) ;
ou : - Pour les tâches qui agissent en tant que wrapper autour d’un outil qui effectue l’authentification elle-même, utilisez la méthode d’authentification des outils pour spécifier le jeton fédéré.
Les tâches de nœud peuvent utiliser le package npm azure-pipelines-tasks-artifacts-common pour obtenir l’idToken. Reportez-vous à l’exemple de code pour obtenir des détails sur l’implémentation.
Demande d’un idToken frais
La variable de pipeline et AZURESUBSCRIPTION_SERVICE_CONNECTION_ID
la System.OidcRequestUri
variable d’environnement exposées dans les tâches permettent AzurePowerShell@5
aux auteurs de AzureCLI@2
pipelines de s’authentifier à partir de leur propre 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
Nouvelles tentatives pour les tâches serveur
Les tâches serveur qui appellent des systèmes externes, tels que AzureFunction
ou InvokeRESTAPI
, peuvent parfois échouer en raison d’erreurs temporaires telles que l’épuisement des ressources de calcul. Auparavant, ces défaillances entraîneraient l’échec de l’ensemble du travail et potentiellement du pipeline.
Pour améliorer la résilience contre les erreurs temporaires, nous avons introduit la prise en charge de la propriété dans les retryCountOnTaskFailure
tâches serveur. Supposons que vous disposez du code YAML suivant dans votre pipeline :
- stage: deploy
jobs:
- job:
pool: server
steps:
- task: AzureFunction@1
retryCountOnTaskFailure: 2
inputs:
function: 'https://api.fabrikamfiber.com'
key: $(functionKey)
method: 'POST'
waitForCompletion: 'false'
Si https://api.fabrikamfiber.com
une erreur temporaire se produit, Azure Pipelines réessaye la requête jusqu’à trois fois (la tentative initiale plus deux nouvelles tentatives spécifiées par retryCountOnTaskFailure
). Chaque nouvelle tentative inclut une période d’attente croissante. Le nombre maximal de nouvelles tentatives autorisées est de 10.
Il retryCountOnTaskFailure
n’est pas disponible pour la ManualValidation
tâche et d’autres tâches qui n’impliquent pas d’appels système externes.
Tâches qui utilisent une version de l’exécuteur de nœud de fin de vie pour exécuter des avertissements d’émission
Les tâches de pipeline qui s’appuient sur une version de nœud qui ne sont plus conservées commencent à recevoir des avertissements :
La version
<version>
de la tâcheTaskName
dépend d’une version de nœud (10) qui est en fin de vie. Contactez le propriétaire de l’extension pour obtenir une version mise à jour de la tâche. Les gestionnaires de tâches doivent consulter les conseils de mise à niveau des nœuds : https://aka.ms/node-runner-guidance
Pour supprimer ces avertissements, vous pouvez définir un environnement ou une variable de pipeline au niveau du pipeline (travail) ou de la tâche. Par exemple :
variables:
AZP_AGENT_CHECK_IF_TASK_NODE_RUNNER_IS_DEPRECATED: false
DockerCompose@0 utilise Docker Compose v2 en mode de compatibilité v1
Docker Compose v1 atteint sa fin de vie et sera supprimé des agents hébergés le 24 juillet 2024. Nous avons mis à jour la tâche DockerCompose@0 pour utiliser Docker Compose v2 en mode de compatibilité v1 si Docker Compose v1 n’est pas disponible sur l’agent.
Toutefois, le mode de compatibilité ne résout pas tous les problèmes de compatibilité. Consultez Migrer vers Compose V2. Certains utilisateurs auront besoin de plus de temps pour mettre à jour leurs projets Docker Compose pour la compatibilité Docker Compose v2. Dans ce cas, suivez ces instructions pour utiliser la tâche DockerComposeV0 avec docker-compose v1.
REMARQUE : Ce guide est basé sur la documentation Install Compose autonome
Utiliser docker-compose v1 sur Windows
Ajoutez l’étape PowerShell à votre pipeline pour télécharger docker-Compose v1.29.2 et l’utiliser avec la tâche DockerComposeV0 sur 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
Utiliser docker-compose v1 sur Linux
Ajoutez l’étape bash à votre pipeline pour télécharger Docker-Compose v1.29.2 et l’utiliser avec la tâche DockerComposeV0 sur 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
Étapes suivantes
Notes
Ces fonctionnalités seront déployées au cours des deux à trois prochaines semaines.
Accédez à Azure DevOps et jetez un coup d’œil.
Comment fournir des commentaires
Nous aimerions savoir ce que vous pensez de ces fonctionnalités. Utilisez le menu Aide pour signaler un problème ou faire une suggestion.
Vous pouvez également obtenir des conseils et répondre à vos questions par la communauté sur Stack Overflow.