具有 VM 配置的应用程序包

Application Packages with VM configuration

我正在尝试按照本文中描述的方式使用应用程序包

但我一直收到错误提示

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

太棒了,所以我创建了一个小型准系统应用程序。 :) 其余详细信息如下,如果我能进一步提供帮助,请随时联系我。

所以我尝试使用与您的代码几乎相同的代码减去 userIdentity 之类的几个标志,看起来我的示例工作正常,我认为只有在应用程序包不正确的情况下才会发生错误参考。就像我的 *.exe 驻留在某个 diff 目录结构中等 :)

我认为创建一个 vanilla 是个好主意(即通过使用现有示例之一为您从头开始应用程序。)这可能会让您有机会快速查看并查看是否遗漏了任何内容.

请随时 ping 我,我会帮助你实现你的煤,我认为它是一些非常小的东西,比如路径错误等(错误消息也提示)

应用程序驻留在此处:

详情:

Readme 中也有 git 的详细信息,但作为 SO 中详细说明此处所有内容的良好做法,我将在此处为您复制粘贴我在自述文件中编写的内容。

quick_sample_batchapppkgworking

Readme:准系统快应用:

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

以下代码是作为端到端应用程序包工作功能的示例代码生成的。

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

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

应用程序包:

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) 中变得可用。创建环境变量以处理应用程序的多个更新版本:(时间戳自动成为应用程序 pkg 填充环境变量的一部分,您无需执行任何操作即可处理此问题。)

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

因此,如果用户设置了正确的包版本并且节点具有应用程序包,他们可以从任何需要应用程序包的地方调用它:(类似这样)

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"

是因为我的应用程序压缩包包含TaskApplciaiton.exe,结构如下:

==> ==>

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

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

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

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

附加的示例包含池级别和任务级别演示。

步数:

  • 首先将一个新的应用程序包添加到我的批处理帐户中:您可以通过门户来完成。 (git 项目有 test1.zip 以及这个 git 示例控制台应用程序。

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

  • 正确填写批处理帐户凭据或用于您的凭据的任何存储帐户的这些信息:

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

另请注意,会有删除作业和池的提示,如果您想查看此应用程序的 return 结果,请保留作业和​​池,然后进入该池内的节点并检查 stdout.txt 文件以获取打印的 txt。 (注意:您可能希望在完成后从门户中删除作业和池。)

我成功运行的截图如下:

所以我能够看到 Test Success 从属于此应用程序包的 TaskApplication.exe 的 stdout.txt 内部节点中打印出来。

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

其他友情截图: