Compartilhar via


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 no Azure Functions.

Sintaxe

# 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.

Entradas

function - url de função do Azure
string. Obrigatório

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


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

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.


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

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


Cabeçalhos headers -
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.


parâmetros de consulta queryParameters -
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.


de evento de conclusão de waitForCompletion -
string. Obrigatório Valores permitidos: true (retorno de chamada), false (ApiResponse). Valor padrão: false.

Como a tarefa relata a conclusão.

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

critérios de sucesso successCriteria -
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 {"status" : "successful"}de resposta, a expressão pode ser eq(root['status'], 'successful'). Saiba mais sobre especificando condições.


Opções de controle de tarefa

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

Variáveis de saída

Nenhum.

Observações

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 no Azure Functions e analisar a resposta.

Onde um sinal de tarefa deve ser concluído quando de 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" }

Consulte 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 o gerenciamento do status da tarefa 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 retorno de chamada evento de conclusão. 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
Execuções em Server, ServerGate
de demandas Nenhum
recursos Essa tarefa não atende a nenhuma demanda para tarefas subsequentes no trabalho.
restrições de comando Qualquer
variáveis settable Qualquer
Versão do agente Todas as versões de agente com suporte.
Categoria de tarefa Utilidade

Consulte também