AzureFunction@1 - 调用 Azure Function v1 任务

在发布管道 无代理作业中使用此任务,在函数应用中调用 HTTP 触发的函数并分析响应。 必须在 Azure Functions 中创建和托管函数应用。

语法

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

输入

function - Azure 函数 URL
string。 必填。

要调用的 Azure 函数的 URL。 示例:https://azurefunctionapp.azurewebsites.net/api/HttpTriggerJS1


key - 函数密钥
string。 必填。

用于访问和调用函数的函数或主机密钥。 若要保护密钥安全,请使用机密管道变量来存储函数密钥。 示例:$(myFunctionKey)myFunctionKey 是一个环境级机密变量,其值作为密钥。


method - 方法
string。 必填。 允许的值:OPTIONSGETHEADPOSTPUTDELETETRACEPATCH。 默认值:POST

将调用函数的 HTTP 方法。


headers - 标头
string。 默认值:{\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}

要附加到发送到函数的请求的 JSON 格式的标头。


queryParameters - 查询参数
string

要追加到函数 URL 的字符串查询。 不得以 ?&开头。


body - 正文
string。 可选。 当 method != GET && method != HEAD时使用。

JSON 格式的请求正文。


waitForCompletion - 完成事件
string。 必填。 允许的值:true(回调)、false(ApiResponse)。 默认值:false

任务如何报告完成。

  • false - API 响应 - 函数返回成功条件,成功条件的计算结果为 true。
  • true - 回调 - 函数发出回调以更新时间线记录。

successCriteria - 成功条件
string。 可选。 当 waitForCompletion = false时使用。

成功任务的条件。 默认情况下,任务在成功时返回 200 OK 状态。

示例:对于响应 {"status" : "successful"},表达式可以 eq(root['status'], 'successful')。 详细了解如何 指定条件


任务控制选项

除任务输入之外,所有任务都具有控制选项。 有关详细信息,请参阅 控件选项和常见任务属性

输出变量

没有。

注解

在发布管道的 无代理作业 中使用此任务,在 Azure Functions 中创建和托管的函数应用中调用 HTTP 触发的函数并分析响应。

回调 被选为完成事件时,任务应在哪里发出信号完成?

若要发出完成信号,函数应将完成数据 POST 到以下管道 REST 终结点。

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

有关详细信息,请参阅此简单的 cmdline 应用程序 。 此外,C# 帮助程序库可用于为无代理任务启用实时日志记录和管理任务状态。 了解详细信息

当超时时间较长时,为什么任务在 1 分钟内失败?

如果函数执行的时间超过 1 分钟,请使用 回调 完成事件。 对于在 60 秒内完成的请求,支持 API 响应完成选项。

例子

使用回调完成模式的 Azure 函数示例

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

要求

要求 说明
管道类型 YAML,经典版本,经典版本
运行时间 Server、ServerGate
需求 没有
功能 此任务不满足作业中后续任务的任何要求。
命令限制 任何
Settable 变量 任何
代理版本 所有支持的代理版本。
任务类别 效用

另请参阅