AzureFunction@1: tarea Invocar la función de Azure v1

Use esta tarea en un trabajo sin agente de una canalización de versión para invocar una función desencadenada por HTTP en una aplicación de funciones y analizar la respuesta. La aplicación de funciones debe crearse y hospedarse en 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.

Entradas

function - Dirección URL de la función de Azure
string. Obligatorio.

Dirección URL de la función de Azure que se va a invocar. Ejemplo: https://azurefunctionapp.azurewebsites.net/api/HttpTriggerJS1.


key - Clave de función
string. Obligatorio.

Función o clave de host usada para tener acceso a la función e invocarla. Para proteger la clave, use una variable de canalización secreta para almacenar la clave de función. Ejemplo: $(myFunctionKey). myFunctionKey es una variable secreta de nivel de entorno con un valor como clave secreta.


method - Método
string. Obligatorio. Valores permitidos: OPTIONS, , HEADGET, POST, PUT, DELETE, , TRACE, . PATCH Valor predeterminado: POST.

Método HTTP con el que se invocará la función.


headers - Encabezados
string. Valor predeterminado: {\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}.

Encabezado en formato JSON que se va a adjuntar a la solicitud enviada a la función.


queryParameters - Parámetros de consulta
string.

Consulta de cadena que se va a anexar a la dirección URL de la función. No debe comenzar con ? o &.


body - Cuerpo
string. Opcional. Use cuando method != GET && method != HEAD.

Cuerpo de la solicitud en formato JSON.


waitForCompletion - Evento de finalización
string. Obligatorio. Valores permitidos: true (Devolución de llamada), false (ApiResponse). Valor predeterminado: false.

Cómo notifica la finalización la tarea.

  • false - Respuesta de la API: la función devuelve criterios correctos y correctos se evalúa como true.
  • true - Devolución de llamada: la función realiza una devolución de llamada para actualizar el registro de escala de tiempo.

successCriteria - Criterios de éxito
string. Opcional. Use cuando waitForCompletion = false.

Criterios para una tarea correcta. De forma predeterminada, la tarea devuelve 200 OK el estado cuando se realiza correctamente.

Ejemplo: para la respuesta {"status" : "successful"}, la expresión puede ser eq(root['status'], 'successful'). Obtenga más información sobre cómo especificar condiciones.


Opciones de control de tareas

Todas las tareas tienen opciones de control además de las entradas de tareas. Para obtener más información, vea Opciones de control y propiedades de tareas comunes.

Variables de salida

Ninguno.

Comentarios

Use esta tarea en un trabajo sin agente de una canalización de versión para invocar una función desencadenada por HTTP en una aplicación de funciones que se crea y hospeda en Azure Functions y analice la respuesta.

¿Dónde debe señalarse la finalización de una tarea cuando se elige Devolución de llamada como evento de finalización?

Para indicar la finalización, la función debe publicar los datos de finalización en el siguiente punto de conexión REST de las canalizaciones.

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

Consulte esta sencilla aplicación cmdline para obtener información específica. Además, hay disponible una biblioteca auxiliar de C# para habilitar el registro en directo y administrar el estado de la tarea para las tareas sin agente. Más información

¿Por qué se produce un error en la tarea en un minuto cuando el tiempo de espera es mayor?

Si la función se ejecuta durante más de un minuto, use el evento de finalización de devolución de llamada. La opción de finalización Respuesta de API se admite para las solicitudes que se completan en un plazo de 60 segundos.

Ejemplos

Ejemplo de una función de Azure que usa el modo de finalización de devolución de llamada

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

Requisitos

Requisito Descripción
Tipos de canalización YAML, compilación clásica, versión clásica
Se ejecuta en Server, ServerGate
Peticiones None
Capabilities Esta tarea no satisface ninguna demanda de tareas posteriores en el trabajo.
Restricciones de comandos Any
Variables que se pueden establecer Any
Versión del agente Todas las versiones de agente compatibles.
Categoría de la tarea: Utilidad

Consulte también