AzureFunction@1 - 叫用 Azure 函式 v1 工作

在發行管線的 無代理程序作業 中使用這項工作,在函式應用程式中叫用 HTTP 觸發的函式,並剖析回應。 函式應用程式必須建立並裝載於 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.

輸入

function - Azure 函式 URL
string. 必要。

要叫用之 Azure 函式的 URL。 範例: https://azurefunctionapp.azurewebsites.net/api/HttpTriggerJS1.


key - 函式索引鍵
string. 必要。

用來存取和叫用函式的函式或主機密鑰。 若要保護金鑰安全,請使用秘密管線變數來儲存函式密鑰。 範例: $(myFunctionKey). myFunctionKey 是環境層級的秘密變數,其值為秘密密鑰。


method - 方法
string. 必要。 允許的值:OPTIONSGETHEAD、、DELETEPUTPOST、、 TRACEPATCH。 預設值: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
要求
Capabilities 此工作不符合作業中後續工作的任何需求。
命令限制 任何
可設定變數 任何
代理程式版本 所有支援的代理程式版本。
工作類別 公用程式

另請參閱