Partager via


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.

Syntaxe

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

Entrées

URL de fonction Azure function -
string. Obligatoire.

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


key - clé de fonction
string. Obligatoire.

Fonction ou clé hôte utilisée pour accéder à la fonction et appeler la fonction. Pour sécuriser 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.


méthode method -
string. Obligatoire. Valeurs autorisées : OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, PATCH. 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. Optionnel. Utilisez quand method != GET && method != HEAD.

Corps de la requête au format JSON.


waitForCompletion - 'événement Completion
string. Obligatoire. Valeurs autorisées : true (rappel), false (ApiResponse). Valeur par défaut : false.

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

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

critères de réussite successCriteria -
string. Optionnel. Utilisez quand waitForCompletion = false.

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

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


Options de contrôle de tâche

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

Variables de sortie

Aucun.

Remarques

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 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 de rappel est choisi comme événement d’achèvement ?

Pour signaler l’achèvement, la fonction doit publier les données d’achèvement vers le point de terminaison REST des pipelines suivants.

{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" }

Consultez cette application cmdline simple pour des spécificités. En outre, une bibliothèque d’assistance C# est disponible pour activer la journalisation dynamique et la gestion de l’état des tâches pour les tâches sans agent. En savoir plus

Pourquoi la tâche échoue-t-elle dans un délai de 1 minute lorsque le délai d’expiration est plus long ?

Si la fonction s’exécute pendant plus de 1 minute, utilisez l’événement de rappel 'achèvement. 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 de 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);
    }
}

Spécifications

Besoin Descriptif
Types de pipelines YAML, Build Classique, Version Classique
Exécutions sur Serveur, ServerGate
demandes Aucun
fonctionnalités de Cette tâche ne répond à aucune demande de tâches ultérieures dans le travail.
restrictions de commande N'importe quel
variables settables N'importe quel
Version de l’agent Toutes les versions de l’agent prises en charge.
Catégorie de tâche Utilité

Voir aussi