Используя YAML в конвейерах Azure, вы можете вызывать функцию Azure https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/utility/azure-function?view=azure-devops
Из функции Azure вы можете получить доступ к пакетному клиенту Azure с помощью пакетного SDK Azure
, который я на самом деле использую 3Функции Azure: один для создания пакета (пул и задания), один для мониторинга (задание выполняется в задании) и один для очистки (удаление пула) после его завершения.
[FunctionName("StartBatch")]
public static async Task StartBatch([QueueTrigger("batchprocess", Connection = "QueueStorage")] Batch batch, ILogger log)
{
log.LogInformation($"Function processed a request for {batch}");
int batchDelay = Int32.Parse(Environment.GetEnvironmentVariable("BatchDelay"));
string batchAccountUrl = Environment.GetEnvironmentVariable("BatchAccountUrl");
try
{
Task<string> tokenProvider() => Utils.GetAuthenticationTokenAsync();
using (var client = BatchClient.Open(new BatchTokenCredentials(batchAccountUrl, tokenProvider)))
{
Infrastucture.BuildBatchInfrastructure(client, batch, log);
await client.JobOperations.AddTaskAsync(batch.JobName, Job.AddTasksAsync(batch, log).Result);
}
log.LogInformation($"Waiting {batchDelay} minutes until starting montioring the batch {batch}");
await Utils.AddMessageToQueue(batch, batchDelay, "monitorbatch");
}
catch (Exception exp)
{
log.LogError("Issue ", exp.StackTrace);
await Utils.AddMessageToQueue(batch, 0, "failedbatchprocess");
}
}