AzureFunction@1 — wywoływanie zadania funkcji platformy Azure w wersji 1
To zadanie służy w zadaniu bez agenta potoku wydania, aby wywołać funkcję wyzwalaną przez protokół HTTP w aplikacji funkcji i przeanalizować odpowiedź. Aplikacja funkcji musi zostać utworzona i hostowana w Azure Functions.
Składnia
# 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.
Dane wejściowe
function
- Adres URL funkcji platformy Azure
string
. Wymagane.
Adres URL funkcji platformy Azure do wywołania. Przykład: https://azurefunctionapp.azurewebsites.net/api/HttpTriggerJS1
.
key
- Klucz funkcji
string
. Wymagane.
Funkcja lub klucz hosta używany do uzyskiwania dostępu do funkcji i wywoływania jej. Aby zachować bezpieczeństwo klucza, użyj zmiennej potoku wpisu tajnego do przechowywania klucza funkcji. Przykład: $(myFunctionKey)
. myFunctionKey
to zmienna wpisu tajnego na poziomie środowiska z wartością jako klucz tajny.
method
- Metoda
string
. Wymagane. Dozwolone wartości: OPTIONS
, , HEAD
GET
, POST
PUT
, , DELETE
, TRACE
, . PATCH
Wartość domyślna: POST
.
Metoda HTTP, za pomocą której zostanie wywołana funkcja.
headers
- Nagłówki
string
. Wartość domyślna: {\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}
.
Nagłówek w formacie JSON, który ma zostać dołączony do żądania wysłanego do funkcji.
queryParameters
- Parametry zapytania
string
.
Zapytanie ciągu, które ma być dołączane do adresu URL funkcji. Nie może rozpoczynać się od ?
lub &
.
body
- Ciała
string
. Opcjonalny. Użyj polecenia , gdy method != GET && method != HEAD
.
Treść żądania w formacie JSON.
waitForCompletion
- Zdarzenie ukończenia
string
. Wymagane. Dozwolone wartości: true
(wywołanie zwrotne), false
(ApiResponse). Wartość domyślna: false
.
Jak zadanie zgłasza ukończenie.
false
- Odpowiedź interfejsu API — funkcja zwraca kryteria powodzenia i powodzenia, które są oceniane na wartość true.true
- Wywołanie zwrotne — funkcja wykonuje wywołanie zwrotne w celu zaktualizowania rekordu osi czasu.
successCriteria
- Kryteria powodzenia
string
. Opcjonalny. Użyj polecenia , gdy waitForCompletion = false
.
Kryteria pomyślnego zadania. Domyślnie zadanie zwraca 200 OK
stan po pomyślnym zakończeniu.
Przykład: w przypadku odpowiedzi {"status" : "successful"}
wyrażenie może mieć wartość eq(root['status'], 'successful')
. Dowiedz się więcej o określaniu warunków.
Opcje sterowania zadania
Wszystkie zadania mają opcje sterowania oprócz danych wejściowych zadań. Aby uzyskać więcej informacji, zobacz Opcje sterowania i typowe właściwości zadań.
Zmienne wyjściowe
Brak.
Uwagi
To zadanie służy w zadaniu bez agenta potoku wydania, aby wywołać funkcję wyzwalaną przez protokół HTTP w aplikacji funkcji utworzonej i hostowanej w Azure Functions i przeanalizować odpowiedź.
Gdzie należy sygnalizować ukończenie zadania po wybraniu wywołania zwrotnego jako zdarzenia ukończenia?
Aby zasygnalizować ukończenie, funkcja powinna wykonać dane post do następującego punktu końcowego REST potoków.
{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" }
Zobacz tę prostą aplikację wiersza polecenia , aby uzyskać szczegółowe informacje. Ponadto dostępna jest biblioteka pomocnika języka C#umożliwiająca rejestrowanie na żywo i zarządzanie stanem zadań dla zadań bez agentów. Dowiedz się więcej
Dlaczego zadanie kończy się niepowodzeniem w ciągu 1 minuty, gdy limit czasu jest dłuższy?
Jeśli funkcja jest wykonywana przez ponad 1 minutę, użyj zdarzenia ukończenia wywołania zwrotnego . Opcja uzupełniania odpowiedzi interfejsu API jest obsługiwana w przypadku żądań zakończonych w ciągu 60 sekund.
Przykłady
Przykład funkcji platformy Azure, która używa trybu uzupełniania wywołania zwrotnego
#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);
}
}
Wymagania
Wymaganie | Opis |
---|---|
Typy potoków | YAML, klasyczna kompilacja, wersja klasyczna |
Działa w | Serwer, ServerGate |
Wymagania | Brak |
Możliwości | To zadanie nie spełnia żadnych wymagań dotyczących kolejnych zadań w zadaniu. |
Ograniczenia poleceń | Dowolne |
Zmienne ustawialne | Dowolne |
Wersja agenta | Wszystkie obsługiwane wersje agenta. |
Kategoria zadania | Narzędzie |