AzureFunction@1 - Invocar a tarefa V1 da Função do Azure

Utilize esta tarefa numa tarefa sem agente de um pipeline de versão para invocar uma função acionada por HTTP numa aplicação de funções e analisar a resposta. A aplicação de funções tem de ser criada e alojada no Funções do Azure.

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 - URL da função do Azure
string. Obrigatório.

O URL da função do Azure a invocar. Exemplo: https://azurefunctionapp.azurewebsites.net/api/HttpTriggerJS1.


key - Tecla de função
string. Obrigatório.

A função ou a chave de anfitrião utilizada para aceder e invocar a função. Para manter a chave segura, utilize uma variável de pipeline secreta para armazenar a chave de função. Exemplo: $(myFunctionKey). myFunctionKey é uma variável secreta ao nível do ambiente com um valor como chave secreta.


method - Método
string. Obrigatório. Valores permitidos: OPTIONS, GET, HEAD, POST, PUT, , DELETE, TRACE, PATCH. Valor predefinido: POST.

O método HTTP com o qual a função será invocada.


headers - Cabeçalhos
string. Valor predefinido: {\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}.

O cabeçalho no formato JSON a anexar ao pedido enviado para a função.


queryParameters - Parâmetros de consulta
string.

A consulta de cadeia a acrescentar ao URL da função. Não pode começar com ? ou &.


body - Corpo
string. Opcional. Utilize quando method != GET && method != HEAD.

O corpo do pedido no formato JSON.


waitForCompletion - Evento de conclusão
string. Obrigatório. Valores permitidos: true (Chamada de Retorno), false (ApiResponse). Valor predefinido: false.

Como a tarefa comunica a conclusão.

  • false - Resposta da API – a função devolve critérios de êxito e êxito avaliados como verdadeiros.
  • true - Chamada de retorno – a função faz uma chamada de retorno para atualizar o registo da linha cronológica.

successCriteria - Critérios de êxito
string. Opcional. Utilize quando waitForCompletion = false.

Os critérios para uma tarefa com êxito. Por predefinição, a tarefa devolve 200 OK o estado quando for bem-sucedida.

Exemplo: Para resposta {"status" : "successful"}, a expressão pode ser eq(root['status'], 'successful'). Saiba mais sobre como especificar condições.


Opções de controlo de tarefas

Todas as tarefas têm opções de controlo para além das entradas de tarefas. Para obter mais informações, veja Opções de controlo e propriedades de tarefas comuns.

Variáveis de saída

Nenhum.

Observações

Utilize esta tarefa numa tarefa sem agente de um pipeline de versão para invocar uma função acionada por HTTP numa aplicação de funções criada e alojada no Funções do Azure e analisar a resposta.

Onde deve um sinal de tarefa concluir quando a Chamada de Retorno é escolhida como o evento de conclusão?

Para assinalar a conclusão, a função deve PUBLICAR os dados de conclusão para o ponto final REST dos pipelines seguintes.

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

Veja esta aplicação de cmdline simples para obter detalhes. Além disso, está disponível uma biblioteca auxiliar C# para ativar o registo em direto e gerir o estado da tarefa para tarefas sem agente. Saiba mais

Porque é que a tarefa falha dentro de 1 minuto quando o tempo limite é maior?

Se a função for executada durante mais de 1 minuto, utilize o evento de conclusão da Chamada de Retorno . A opção de conclusão da Resposta da API é suportada para pedidos concluídos no prazo de 60 segundos.

Exemplos

Exemplo de uma Função do Azure que utiliza o modo de conclusão de chamada de retorno

#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 Description
Tipos de pipeline YAML, Compilação clássica, Versão clássica
É executado em Server, ServerGate
Exigências Nenhuma
Capacidades Esta tarefa não satisfaz quaisquer exigências para tarefas subsequentes na tarefa.
Restrições de comandos Qualquer
Variáveis de tabelas definidas Qualquer
Versão do agente Todas as versões de agente suportadas.
Categoria da tarefa Utilitário

Ver também