AzureFunction@1 - Azure Function 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. 필수 요소. 허용되는 값: OPTIONS, , GET, HEADPOST, 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 Function의 예

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

요구 사항

요구 사항 Description
파이프라인 유형 YAML, 클래식 빌드, 클래식 릴리스
실행 중 Server, ServerGate
요청 없음
Capabilities 이 작업은 작업의 후속 작업에 대한 요구를 충족하지 않습니다.
명령 제한 사항 모두
설정 가능한 변수 모두
에이전트 버전 지원되는 모든 에이전트 버전.
작업 범주 유틸리티

추가 정보