AzureFunction@1 – Invocar tarefa do Azure Function v1

Use essa tarefa em um trabalho sem agente de um pipeline de lançamento para invocar uma função disparada por HTTP em um aplicativo de funções e analisar a resposta. O aplicativo de funções deve ser criado e hospedado em 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 - URL da função do Azure
string. Obrigatórios.

A URL da função do Azure a ser invocada. Exemplo: https://azurefunctionapp.azurewebsites.net/api/HttpTriggerJS1.


key - Chave de função
string. Obrigatórios.

A função ou a chave de host usada para acessar e invocar a função. Para manter a chave segura, use uma variável de pipeline secreta para armazenar a chave de função. Exemplo: $(myFunctionKey). myFunctionKey é uma variável secreta no nível do ambiente com um valor como a chave secreta.


method - Método
string. Obrigatórios. Valores permitidos: OPTIONS, GET, , POSTHEAD, PUT, DELETE, , TRACE. PATCH Valor padrão: POST.

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


headers - Cabeçalhos
string. Valor padrão: {\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 ser anexado à solicitação enviada à função.


queryParameters - Parâmetros de consulta
string.

A consulta de cadeia de caracteres a ser acrescentada à URL da função. Não deve começar com ? ou &.


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

O corpo da solicitação no formato JSON.


waitForCompletion - Evento de conclusão
string. Obrigatórios. Valores permitidos: true (Retorno de chamada), false (ApiResponse). Valor padrão: false.

Como a tarefa relata a conclusão.

  • false - Resposta da API - a função retorna critérios de êxito e êxito avaliados como verdadeiros.
  • true – Retorno de chamada – a função faz um retorno de chamada para atualizar o registro linha do tempo.

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

Os critérios para uma tarefa bem-sucedida. Por padrão, a tarefa retorna 200 OK status quando 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 controle da tarefa

Todas as tarefas têm opções de controle além de suas entradas de tarefa. Para obter mais informações, consulte Opções de controle e propriedades comuns da tarefa.

Variáveis de saída

Nenhum.

Comentários

Use essa tarefa em um trabalho sem agente de um pipeline de lançamento para invocar uma função disparada por HTTP em um aplicativo de funções criado e hospedado em Azure Functions e analisar a resposta.

Em que uma tarefa deve sinalizar a conclusão quando o Retorno de Chamada é escolhido como o evento de conclusão?

Para sinalizar a conclusão, a função deve postar dados de conclusão para o ponto de extremidade REST de pipelines a seguir.

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

Confira este aplicativo cmdline simples para obter detalhes. Além disso, uma biblioteca auxiliar do C# está disponível para habilitar o registro em log dinâmico e gerenciar status de tarefas para tarefas sem agente. Saiba mais

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

Se a função for executada por mais de 1 minuto, use o evento conclusão de Retorno de chamada. A opção de conclusão da Resposta à API tem suporte para solicitações que são concluídas dentro de 60 segundos.

Exemplos

Exemplo de uma função do Azure que usa o modo de conclusão de retorno de chamada

#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 Descrição
Tipos de pipeline YAML, build clássico, versão clássica
Executa em Server, ServerGate
Demandas Nenhum
Funcionalidades Essa tarefa não atende a nenhuma demanda para tarefas subsequentes no trabalho.
Restrições de comando Qualquer
Variáveis configuráveis Qualquer
Versão do agente Todas as versões do agente com suporte.
Categoria da tarefa Utilitário

Confira também