AzureFunction@1: Azure Function v1-Aufgabe aufrufen

Verwenden Sie diese Aufgabe in einem Auftrag ohne Agent einer Releasepipeline, um eine von HTTP ausgelöste Funktion in einer Funktions-App aufzurufen und die Antwort zu analysieren. Die Funktions-App muss in Azure Functions erstellt und gehostet werden.

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.

Eingaben

function - Azure-Funktions-URL
string. Erforderlich.

Die URL der azure-Funktion, die aufgerufen werden soll. Beispiel: https://azurefunctionapp.azurewebsites.net/api/HttpTriggerJS1.


key - Funktionstaste
string. Erforderlich.

Die Funktion oder der Hostschlüssel, die für den Zugriff auf die Funktion und den Aufruf der Funktion verwendet wird. Um den Schlüssel sicher zu halten, verwenden Sie eine geheime Pipelinevariable, um den Funktionsschlüssel zu speichern. Beispiel: $(myFunctionKey). myFunctionKey ist eine Geheimnisvariable auf Umgebungsebene mit einem Wert als geheimer Schlüssel.


method - Methode
string. Erforderlich. Zulässige Werte: OPTIONS, GET, HEAD, PUTPOST, DELETE, TRACE, , PATCH. Standardwert. POST.

Die HTTP-Methode, mit der die Funktion aufgerufen wird.


headers - Header
string. Standardwert. {\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}.

Der Header im JSON-Format, der an die Anforderung angefügt werden soll, die an die Funktion gesendet wird.


queryParameters - Abfrageparameter
string.

Die Zeichenfolgenabfrage, die an die Funktions-URL angefügt werden soll. Darf nicht mit ? oder &beginnen.


body - Körper
string. Optional. Verwenden Sie , wenn method != GET && method != HEAD.

Der Anforderungstext ist im JSON-Format.


waitForCompletion - Abschlussereignis
string. Erforderlich. Zulässige Werte: true (Rückruf), false (ApiResponse). Standardwert. false.

Gibt an, wie die Aufgabe den Abschluss meldet.

  • false - API-Antwort : Die Funktion gibt den Erfolg zurück, und die Erfolgskriterien werden zu "true" ausgewertet.
  • true – Rückruf: Die Funktion führt einen Rückruf aus, um den Zeitleiste Datensatz zu aktualisieren.

successCriteria - Erfolgskriterien
string. Optional. Verwenden Sie , wenn waitForCompletion = false.

Die Kriterien für eine erfolgreiche Aufgabe. Standardmäßig gibt der Task bei erfolgreicher Ausführung status zurück 200 OK .

Beispiel: Für die Antwort {"status" : "successful"}kann der Ausdruck sein eq(root['status'], 'successful'). Erfahren Sie mehr über das Angeben von Bedingungen.


Optionen für die Vorgangskontrolle

Alle Vorgänge verfügen zusätzlich zu ihren Eingaben über Steuerungsoptionen. Weitere Informationen finden Sie unter Steuerungsoptionen und allgemeine Aufgabeneigenschaften.

Ausgabevariablen

Keine.

Hinweise

Verwenden Sie diese Aufgabe in einem agentlosen Auftrag einer Releasepipeline, um eine von HTTP ausgelöste Funktion in einer Funktions-App aufzurufen, die in Azure Functions erstellt und gehostet wird, und analysieren Sie die Antwort.

Wo sollte eine Aufgabe die Vervollständigung signalisieren, wenn Rückruf als Abschlussereignis ausgewählt wird?

Um die Vervollständigung zu signalisieren, sollte die Funktion POST-Vervollständigungsdaten an den folgenden Pipelines-REST-Endpunkt senden.

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

Einzelheiten finden Sie in dieser einfachen Cmdline-Anwendung . Darüber hinaus ist eine C#-Hilfsbibliothek verfügbar, um die Liveprotokollierung und -verwaltung des Aufgabenstatus für Aufgaben ohne Agent zu aktivieren. Weitere Informationen

Warum schlägt die Aufgabe innerhalb von 1 Minute fehl, wenn das Timeout länger ist?

Wenn die Funktion länger als 1 Minute ausgeführt wird, verwenden Sie das Rückrufabschlussereignis . Die API-Antwort-Vervollständigungsoption wird für Anforderungen unterstützt, die innerhalb von 60 Sekunden abgeschlossen werden.

Beispiele

Beispiel für eine Azure-Funktion, die den Rückrufabschlussmodus verwendet

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

Anforderungen

Anforderung BESCHREIBUNG
Pipelinetypen YAML, Klassischer Build, klassisches Release
Wird ausgeführt auf Server, ServerGate
Forderungen Keine
Capabilities Diese Aufgabe erfüllt keine Anforderungen an nachfolgende Aufgaben im Auftrag.
Befehlseinschränkungen Any
Setzbare Variablen Any
Agent-Version Alle unterstützten Agent-Versionen.
Aufgabenkategorie Hilfsprogramm

Weitere Informationen