Freigeben über


AzureFunction@1 – Azure Function v1-Aufgabe aufrufen

Verwenden Sie diese Aufgabe in einem agentlosen Auftrag einer Releasepipeline, um eine 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.

Eingänge

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 die Hosttaste, mit der auf die Funktion zugegriffen und aufgerufen wird. Um den Schlüssel sicher zu halten, verwenden Sie eine geheime Pipelinevariable, um den Funktionsschlüssel zu speichern. Beispiel: $(myFunctionKey). myFunctionKey ist eine geheime Variable auf Umgebungsebene mit einem Wert als geheimer Schlüssel.


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

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


headers - Kopfzeilen
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 an die Funktion gesendete Anforderung angefügt werden soll.


queryParameters - Abfrageparameter
string.

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


body - Body-
string. Wahlfrei. Wird verwendet, wenn method != GET && method != HEAD.

Der Anforderungstext im JSON-Format.


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

Wie der Abschluss des Vorgangs meldet.

  • false - API-Antwort - die Funktion gibt Erfolgs- und Erfolgskriterien als wahr zurück.
  • true – Rückruf – führt die Funktion einen Rückruf aus, um den Zeitachsendatensatz zu aktualisieren.

successCriteria - Erfolgskriterien
string. Wahlfrei. Wird verwendet, wenn waitForCompletion = false.

Die Kriterien für einen erfolgreichen Vorgang. Standardmäßig gibt die Aufgabe 200 OK Status zurück, wenn dies erfolgreich war.

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


Aufgabensteuerungsoptionen

Alle Aufgaben verfügen zusätzlich zu ihren Aufgabeneingaben über Steuerungsoptionen. Weitere Informationen finden Sie unter Steuerelementoptionen und allgemeinen Aufgabeneigenschaften.

Ausgabevariablen

Keiner.

Bemerkungen

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

Wo sollte ein Aufgabensignal abgeschlossen werden, wenn Callback- als Abschlussereignis ausgewählt wird?

Um den Abschluss zu signalisieren, sollte die Funktion POST-Abschlussdaten 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" }

Weitere Informationen finden Sie in dieser einfachen cmdline-Anwendung. Darüber hinaus ist eine C#-Hilfsbibliothek verfügbar, um die Liveprotokollierung und das Verwalten des Aufgabenstatus für agentlose Aufgaben zu ermöglichen. Weitere Informationen

Warum schlägt der Vorgang 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 Callback Abschlussereignis. Die API-Antwort-Abschlussoption 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, Classic Build, Classic Release
Läuft auf Server, ServerGate
Anforderungen Nichts
Funktionen Dieser Vorgang erfüllt keine Anforderungen für nachfolgende Vorgänge im Auftrag.
Befehlseinschränkungen Jegliche
Settable-Variablen Jegliche
Agentversion Alle unterstützten Agentversionen.
Vorgangskategorie Nützlichkeit

Siehe auch