Condividi tramite


AzureFunction@1 - Richiamare l'attività funzione di Azure v1

Usare questa attività in un processo senza agente di una pipeline di versione per richiamare una funzione attivata HTTP in un'app per le funzioni e analizzare la risposta. L'app per le funzioni deve essere creata e ospitata in Funzioni di Azure.

Sintassi

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

Input

function - URL della funzione di Azure
string. Obbligatorio.

URL della funzione di Azure da richiamare. Esempio: https://azurefunctionapp.azurewebsites.net/api/HttpTriggerJS1.


key - Chiave funzione
string. Obbligatorio.

Funzione o chiave host usata per accedere e richiamare la funzione. Per proteggere la chiave, usare una variabile della pipeline privata per archiviare la chiave della funzione. Esempio: $(myFunctionKey). myFunctionKey è una variabile privata a livello di ambiente con un valore come chiave privata.


method - Metodo
string. Obbligatorio. Valori consentiti: GETPOSTHEADPATCHOPTIONSPUTDELETETRACE, . Valore predefinito: POST.

Metodo HTTP con cui verrà richiamata la funzione.


headers - Intestazioni
string. Valore predefinito: {\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}.

Intestazione in formato JSON da collegare alla richiesta inviata alla funzione.


queryParameters - Parametri di query
string.

Query stringa da aggiungere all'URL della funzione. Non deve iniziare con ? o &.


body - Corpo
string. facoltativo. Usare quando method != GET && method != HEAD.

Corpo della richiesta in formato JSON.


waitForCompletion - Evento di completamento
string. Obbligatorio. Valori consentiti: true (Callback), false (ApiResponse). Valore predefinito: false.

Modalità di completamento del report dell'attività.

  • false - Risposta API: la funzione restituisce criteri di esito positivo e riuscito restituisce true.
  • true - Callback: la funzione esegue un callback per aggiornare il record della sequenza temporale.

successCriteria - Criteri di successo
string. facoltativo. Usare quando waitForCompletion = false.

Criteri per un'attività riuscita. Per impostazione predefinita, l'attività restituisce 200 OK lo stato in caso di esito positivo.

Esempio: per la risposta {"status" : "successful"}, l'espressione può essere eq(root['status'], 'successful'). Altre informazioni sulla specifica delle condizioni.


Opzioni di controllo delle attività

Tutte le attività dispongono di opzioni di controllo oltre ai relativi input attività. Per altre informazioni, vedere Opzioni di controllo e proprietà comuni delle attività.

Variabili di output

Nessuno.

Osservazioni

Usare questa attività in un processo senza agente di una pipeline di versione per richiamare una funzione attivata HTTP in un'app per le funzioni creata e ospitata in Funzioni di Azure e analizzare la risposta.

Dove deve essere completato un segnale di attività quando callback viene scelto come evento di completamento?

Per segnalare il completamento, la funzione deve INVIARE i dati di completamento all'endpoint REST della pipeline seguente.

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

Per specifiche, vedere questa semplice applicazione cmdline . Inoltre, una libreria helper C# è disponibile per abilitare la registrazione dinamica e la gestione dello stato dell'attività per le attività senza agente. Scopri di più

Perché l'attività ha esito negativo entro 1 minuto quando il timeout è più lungo?

Se la funzione viene eseguita per più di 1 minuto, usare l'evento di completamento del callback . L'opzione di completamento della risposta API è supportata per le richieste completate entro 60 secondi.

Esempio

Esempio di una funzione di Azure che usa la modalità di completamento del callback

#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);
    }
}

Requisiti

Requisito Descrizione
Tipi di pipeline YAML, build classica, versione classica
Esecuzione in Server, ServerGate
Richieste Nessuno
Capabilities Questa attività non soddisfa le richieste per le attività successive nel processo.
Restrizioni dei comandi Qualsiasi
Variabili impostabili Qualsiasi
Versione agente Tutte le versioni dell'agente supportate.
Categoria attività Utilità

Vedi anche