具有VM配置的应用程序包

时间:2017-07-12 19:21:59

标签: azure-batch

我正在尝试按照

中描述的方式使用应用程序包

但是我一直在说错误

application path not found.

任何想法都可能出错?或

应用程序包如何在后台运行,这可能有助于我调试错误?

编辑:我正在尝试添加特定于我的作业管理器任务的应用程序包。我通过Azure门户以名称JobManagerTask和版本1.0将该包添加为zip文件。这是我用来引用它的代码:

    string taskID = "tasktest1";
    // Obtain application package that has executables for job manager task
    ApplicationPackageReference jobManagerApp = new ApplicationPackageReference { ApplicationId = "JobManagerTask", Version = "1.0" };
    // Command Line
    string commandLine = @"cmd /c %AZ_BATCH_APP_PACKAGE_JOBMANAGERTASK#1.0%\\JobManagerTask.exe";
    // Create a CloudTask
    CloudTask oneTask = new CloudTask(taskID, commandLine);
    oneTask.ApplicationPackageReferences = new List<ApplicationPackageReference> { jobManagerApp };
    // Provide elevated admin access to the task
    oneTask.UserIdentity = new UserIdentity(new AutoUserSpecification(elevationLevel: ElevationLevel.Admin, scope: AutoUserScope.Task));
    // Could add task resource files if needed here
    await batchClient.JobOperations.AddTaskAsync(jobID, oneTask);

1 个答案:

答案 0 :(得分:2)

Coool,所以我创建了一个小的准系统应用程序。 :)其他详细信息如下,如果我可以提供更多帮助,请随时与我联系。

所以我尝试使用几乎完全相同的代码,例如你的userIdentity等几个标志,看起来我的样本工作正常,我认为错误只会发生在应用程序包的情况下没有正确引用&#39; d。就像我的* .exe位于某些差异结构等:)

我认为创建一个香草是一个好主意(即通过一个现有的样本从头开始应用程序。)这可能会让你有机会快速看一看,看看你是否遗漏了任何东西。

请随意ping我,我会帮助你实现你的煤炭,我认为它的东西非常小,如路径错误等(错误信息也提示)

应用程序驻留在此处:

明细:

git的Readme中还有详细信息,但是在这里详细说明所有内容的一个好习惯我会在这里复制粘贴自述文件。

quick_sample_batchapppkgworking

自述文件:准系统快速应用程序:

请注意,此应用程序只是基于DotNetTutorial现有示例的快速示例。

以下代码生成就像端到端应用包工作功能的示例代码一样。

https://docs.microsoft.com/en-us/azure/batch/

https://docs.microsoft.com/en-us/azure/batch/batch-technical-overview

App Pacakges:

https://docs.microsoft.com/en-us/azure/batch/batch-application-packages

https://azure.microsoft.com/en-us/blog/application-packages-and-task-dependencies-now-available-on-azure-batch/

概述工作原理非常简单,当用户上传添加应用程序包时,程序包在节点的工作目录(wd)中可用。创建env var以处理应用程序的多个更新版本:(时间戳自动成为App pkg填充的env var的一部分,您无需执行任何操作来处理此问题。)

set AZ_BATCH_APP_PACKAGE_TEST1#1.0=C:\user\tasks\applications\wd\test1\1.0\2017-07-14T21.45.45.765Z

因此,如果用户拥有正确的软件包版本,所有集合和节点都有app pkg,他们可以根据应用程序包的需要调用它:(类似这样)

string taskCommandLine = String.Format("cmd /c %AZ_BATCH_APP_PACKAGE_TEST1#1.0%\\ImageTest\\TaskApplication.exe");

内部实现也相当简洁。

请注意原因:

%AZ_BATCH_APP_PACKAGE_TEST1#1.0%\\ImageTest\\TaskApplication.exe"

是因为我的应用程序包zip包含以下结构下的TaskApplciaiton.exe:

zip file ==&gt; underlying folder ==&gt; main exe file which will get used by this sample

进一步添加:应用程序包是一个.zip文件,其中包含运行应用程序所需的应用程序二进制文件和支持文件。每个应用程序包代表应用程序的特定版本。+

您可以在池和任务级别指定应用程序包。您可以在创建池或任务时指定一个或多个这些包和(可选)版本。+

•池应用程序包部署到池中的每个节点。当节点加入池时,以及重新引导或重新映像时,将部署应用程序。 当池中的所有节点执行作业任务时,池应用程序包是合适的。您可以在创建池时指定一个或多个应用程序包,也可以添加或更新现有池的程序包。如果更新现有池的应用程序包,则必须重新启动其节点才能安装新程序包。

•在运行任务的命令行之前,任务应用程序包仅部署到计划运行任务的计算节点。如果指定的应用程序包和版本已在节点上,则不会重新部署它并使用现有的包。 任务应用程序包在共享池环境中很有用,其中在一个池上运行不同的作业,并且在作业完成时不会删除池。如果您的作业的任务少于池中的节点,则任务应用程序包可以最小化数据传输,因为您的应用程序仅部署到运行任务的节点。

附件样本包含池级别以及任务级别演示。

步骤:

  • 首先在我的批处理帐户中添加一个新的应用程序包:您可以通过门户网站执行此操作。 (git项目有test1.zip以及这个git示例控制台应用程序。

  • 然后打开您的DotNetTurorial解决方案:

  • 正确填写批量帐户凭据或正在使用的任何存储帐户的这些信息:

  • 点击开始barebone.cs被设置为开始项目,**请注意您可能需要更改* .proj文件,因为在我的本地所有的nugets都来自{{1} }

请注意,将提示删除作业和池,如果要查看此应用程序的返回结果,请保留作业和​​池,然后进入该池内的节点并检出stdout.txt文件为txt打印。 (注意:完成后,您可能希望从门户中删除作业和池。)

我成功投放的截图如下:

所以我能够从作为此应用程序包一部分的TaskApplication.exe中看到c:\cxcache在我的stdout.txt内部节点中打印出来。

此示例准系统应用程序中使用的代码将重复使用此处存在的示例: https://github.com/Azure/azure-batch-samples/tree/master/CSharp/ArticleProjects/DotNetTutorial

其他友好截图:

Files inside nodes with app package available another simple view of files inside node Successful run This is view from batch explorer