1

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

但我一直收到一个错误说

application path not found.

有什么想法可能是错的吗?或者

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

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

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

1 回答 1

2

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

所以我尝试了几乎相同的代码,比如你的减去几个标志userIdentity,看起来我的示例工作正常,我认为只有在应用程序包没有正确引用的情况下才会发生错误。就像我的 *.exe 驻留在某些差异目录结构等中一样。:)

我认为创建一个 vanilla 是个好主意(即,通过获取现有样本之一为您从头开始应用程序。)这可能让您有机会快速查看并查看您是否遗漏了什么。

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

应用程序驻留在此处:

细节:

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

quick_sample_batchapppkgworking

自述文件:准系统快应用:

请注意,此应用程序只是基于 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) 中可用。创建 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:

压缩文件==> 底层文件夹==>此示例将使用的主 exe 文件

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

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

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

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

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

脚步:

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

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

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

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

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

我成功运行的屏幕截图如下:

因此,我能够Test Success从作为该应用程序包的一部分的 TaskApplication.exe 看到打印在我的 stdout.txt 内部节点中。

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

其他友好截图:

具有可用应用程序包的节点内的文件 节点内文件的另一个简单视图 成功运行 这是批处理浏览器的视图

于 2017-07-16T02:39:44.443 回答