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.
입력
Azure 함수 URLfunction
-
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
-
Completion 이벤트
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);
}
}
요구 사항
요구 사항 | 설명 |
---|---|
파이프라인 유형 | YAML, 클래식 빌드, 클래식 릴리스 |
다음에서 실행 | Server, ServerGate |
요구 | 없음 |
기능 | 이 작업은 작업의 후속 작업에 대한 요구 사항을 충족하지 않습니다. |
명령 제한 | 어느 것이든 |
settable 변수 | 어느 것이든 |
에이전트 버전 | 지원되는 모든 에이전트 버전입니다. |
작업 범주 | 유틸리티 |
참고하십시오
- Azure Pipelines 사용하여 Azure Functions 배포 자동화
- 에이전트 없는 작업