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
, , HEAD
GET
, 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 |