AzureFunction@1 - 叫用 Azure 函式 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
。 必須的。 允許的值: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 觸發函式,並剖析回應。
當 回呼 選擇為完成事件時,工作應該在何處發出完成訊號?
若要發出完成訊號,函式應該會將完成數據張貼到下列管線 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 分鐘,請使用 回呼 完成事件。 API 回應完成選項支援在 60 秒內完成的要求。
範例
使用回呼完成模式的 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 變數 | 任意 |
代理程式版本 | 所有支援的代理程式版本。 |
工作類別 | 效用 |