AzureFunction@1 - Appeler une tâche Azure Function v1

Utilisez cette tâche dans un travail sans agent d’un pipeline de mise en production pour appeler une fonction déclenchée par HTTP dans une application de fonction et analyser la réponse. L’application de fonction doit être créée et hébergée dans Azure Functions.

Syntax

# Invoke Azure Function v1
# Invoke an Azure Function.
- task: AzureFunction@1
  inputs:
    function: # string. Required. Azure function URL. 
    key: # string. Required. Function key. 
    method: 'POST' # 'OPTIONS' | 'GET' | 'HEAD' | 'POST' | 'PUT' | 'DELETE' | 'TRACE' | 'PATCH'. Required. Method. Default: POST.
    #headers: # string. Headers. 
    #queryParameters: # string. Query parameters. 
    #body: # string. Optional. Use when method != GET && method != HEAD. Body. 
  # Advanced
    waitForCompletion: 'false' # 'true' | 'false'. Required. Completion event. Default: false.
    #successCriteria: # string. Optional. Use when waitForCompletion = false. Success criteria.
# Invoke Azure Function v1
# Invoke an Azure Function as a part of your pipeline.
- task: AzureFunction@1
  inputs:
    function: # string. Required. Azure function URL. 
    key: # string. Required. Function key. 
    method: 'POST' # 'OPTIONS' | 'GET' | 'HEAD' | 'POST' | 'PUT' | 'DELETE' | 'TRACE' | 'PATCH'. Required. Method. Default: POST.
    #headers: # string. Headers. 
    #queryParameters: # string. Query parameters. 
    #body: # string. Optional. Use when method != GET && method != HEAD. Body. 
  # Advanced
    waitForCompletion: 'false' # 'true' | 'false'. Required. Completion event. Default: false.
    #successCriteria: # string. Optional. Use when waitForCompletion = false. Success criteria.

Entrées

function - URL de la fonction Azure
string. Obligatoire.

URL de la fonction Azure à appeler. Exemple : https://azurefunctionapp.azurewebsites.net/api/HttpTriggerJS1.


key - Clé de fonction
string. Obligatoire.

La fonction ou la clé d’hôte utilisée pour accéder à la fonction et l’appeler. Pour assurer la sécurité de la clé, utilisez une variable de pipeline secret pour stocker la clé de fonction. Exemple : $(myFunctionKey). myFunctionKey est une variable secrète au niveau de l’environnement avec une valeur comme clé secrète.


method - Méthode
string. Obligatoire. Valeurs autorisées : , , POST, , , TRACEDELETE. PATCHPUTHEADGETOPTIONS Valeur par défaut : POST.

Méthode HTTP avec laquelle la fonction sera appelée.


headers - En-têtes
string. Valeur par défaut : {\n"Content-Type":"application/json", \n"PlanUrl": "$(system.CollectionUri)", \n"ProjectId": "$(system.TeamProjectId)", \n"HubName": "$(system.HostType)", \n"PlanId": "$(system.PlanId)", \n"JobId": "$(system.JobId)", \n"TimelineId": "$(system.TimelineId)", \n"TaskInstanceId": "$(system.TaskInstanceId)", \n"AuthToken": "$(system.AccessToken)"\n}.

En-tête au format JSON à joindre à la requête envoyée à la fonction.


queryParameters - Paramètres de requête
string.

Requête de chaîne à ajouter à l’URL de la fonction. Ne doit pas commencer par ? ou &.


body - Corps
string. facultatif. Utilisez quand method != GET && method != HEAD.

Corps de la demande au format JSON.


waitForCompletion - Événement d’achèvement
string. Obligatoire. Valeurs autorisées : true (Callback), false (ApiResponse). Valeur par défaut : false.

Comment la tâche signale l’achèvement.

  • false - Réponse de l’API : la fonction retourne la valeur true pour les critères de réussite.
  • true - Rappel : la fonction effectue un rappel pour mettre à jour l’enregistrement chronologie.

successCriteria - Critères de réussite
string. facultatif. Utilisez quand waitForCompletion = false.

Critères pour la réussite d’une tâche. Par défaut, la tâche retourne 200 OK status en cas de réussite.

Exemple : Pour la réponse {"status" : "successful"}, l’expression peut être eq(root['status'], 'successful'). En savoir plus sur la spécification de conditions.


Options de contrôle de la tâche

Toutes les tâches ont des options de contrôle en plus de leurs entrées de tâches. Pour plus d’informations, consultez Options de contrôle et propriétés de tâche courantes.

Variables de sortie

Aucun.

Notes

Utilisez cette tâche dans un travail sans agent d’un pipeline de mise en production pour appeler une fonction déclenchée via HTTP dans une application de fonction créée et hébergée dans Azure Functions et analyser la réponse.

Où une tâche doit-elle signaler l’achèvement lorsque Rappel est choisi comme événement d’achèvement ?

Pour signaler l’achèvement, la fonction doit publier (POST) les données d’achèvement sur le point de terminaison REST du pipeline suivant.

{planUri}/{projectId}/_apis/distributedtask/hubs/{hubName}/plans/{planId}/events?api-version=2.0-preview.1

**Request Body**
{ "name": "TaskCompleted", "taskId": "taskInstanceId", "jobId": "jobId", "result": "succeeded" }

Pour plus d’informations, consultez cette application en ligne de commande simple. En outre, une bibliothèque d’assistance C# est disponible pour activer la journalisation dynamique et gérer l’état des tâches sans agent. En savoir plus

Pourquoi la tâche échoue-t-elle dans un délai d’une minute alors que le délai d’expiration est plus long ?

Si la fonction s’exécute pendant plus de 1 minute, utilisez l’événement d’achèvement Rappel. L’option d’achèvement de la réponse de l’API est prise en charge pour les requêtes qui se terminent dans les 60 secondes.

Exemples

Exemple d’une fonction Azure qui utilise le mode d’achèvement du rappel

#r "Newtonsoft.Json"

using System;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;

public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
    var url = req.Headers["PlanUrl"];
    var projectId = req.Headers["ProjectId"];
    var hubName = req.Headers["HubName"];
    var planId = req.Headers["PlanId"];
    var jobId = req.Headers["JobId"];
    var timelineId = req.Headers["TimelineId"];
    var taskInstanceId = req.Headers["TaskinstanceId"];
    var authToken = req.Headers["AuthToken"];

    var callbackUrl = $"{url}/{projectId}/_apis/distributedtask/hubs/{hubName}/plans/{planId}/events?api-version=2.0-preview.1";
  
    var successBody = JsonConvert.SerializeObject(new {
        name = "TaskCompleted",
        taskId = taskInstanceId.ToString(),
        jobId = jobId.ToString(),
        result = "succeeded"
    });

    // the following call does not block
    Task.Run(() =>
    {
        Thread.Sleep(70000); // simulate long running work
        PostEvent(callbackUrl, successBody, authToken, log);
    });
   
    return new OkObjectResult("Long-running job successfully scheduled!");
}
    
public static void PostEvent(String callbackUrl, String body, String authToken, ILogger log)
{
    try
    {
        var client = new HttpClient();
        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", authToken);
        var requestContent = new StringContent(body, Encoding.UTF8, "application/json");
        var response = client.PostAsync(new Uri(callbackUrl), requestContent).Result;
        var responseContent = response.Content.ReadAsStringAsync().Result;
        log.LogInformation(response.StatusCode.ToString());
        log.LogInformation(responseContent);
    }
    catch (Exception ex)
    {
        log.LogError(ex.Message);
    }
}

Configuration requise

Condition requise Description
Types de pipelines YAML, build classique, version classique
S’exécute sur Server, ServerGate
Demandes None
Capabilities Cette tâche ne répond à aucune demande pour les tâches suivantes dans le travail.
Restrictions de commande Quelconque
Variables paramétrables Quelconque
Version de l’agent Toutes les versions d’agent prises en charge.
Catégorie de la tâche Utilitaire

Voir aussi