如何从Azure管道调用Azure批处理服务

时间:2018-09-21 15:12:25

标签: azure-pipelines azure-pipelines-release-pipeline

我已经创建了处理某些逻辑的Azure批处理服务。我想从发布管道中调用Azure批处理作为空进程。有可能吗?

Azure批处理服务是在.net控制台应用程序中的Azure批处理SDK中编写的

或者我想从Azure管道调用Azure函数,这将间接调用Azure批处理。

请建议

1 个答案:

答案 0 :(得分:-1)

在Azure管道中使用YAML,您可以调用Azure函数https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/utility/azure-function?view=azure-devops

从Azure功能中,您可以使用azure Batch SDK访问Azure Batch客户端

我实际上使用了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");
}

}