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.
# 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.
输入
function
- Azure 函数 URL
string
. 必需。
要调用的 Azure 函数的 URL。 示例:https://azurefunctionapp.azurewebsites.net/api/HttpTriggerJS1
。
key
- 功能键
string
. 必需。
用于访问和调用函数的函数或主机密钥。 若要保护密钥的安全,请使用机密管道变量来存储函数密钥。 示例:$(myFunctionKey)
。 myFunctionKey
是一个环境级机密变量,其值作为密钥。
method
- 方法
string
. 必需。 允许的值:OPTIONS
、GET
、、HEAD
、POST
PUT
、DELETE
、TRACE
、PATCH
。 默认值: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 |
需求 | 无 |
功能 | 此任务不满足作业中后续任务的任何要求。 |
命令限制 | 任意 |
可设置的变量 | 任意 |
代理版本 | 所有支持的代理版本。 |
任务类别 | 实用工具 |