【问题标题】:Application Packages with VM configuration具有 VM 配置的应用程序包
【发布时间】:2017-07-12 19:21:59
【问题描述】:

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

但我一直收到错误提示

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

【问题讨论】:

  • 嗨,您能分享您尝试过的代码吗:还希望您正确访问%AZ_BATCH_APP_PACKAGE_&lt;App_PKG_NAME&gt; 并在这里查看此文档:docs.microsoft.com/en-us/azure/batch/batch-dotnet-get-started,我希望我可以复制并提供帮助解决这个问题的兄弟:) 将等待您的回复。
  • @Tats_innit 我刚刚将代码 sn-p 添加到我的帖子中。谢谢!
  • saweeet,谢谢@J.B.,我会尝试一下,看看是否可以复制它,无论哪种情况,我都会尝试为您创建一个准系统代码,以便您查看。 :)
  • @Tats_innit 那太好了!谢谢!
  • 更新:酷,所以只是让你更新:@J.B,我有一个几乎准备好的样本,只是去掉了一些凭据等,将更新它作为这篇文章的答案,然后我们可以看看如何您的应用程序行为不端,它可能像错误的路径等一样轻微。 al.,一旦我完成了 git repo 中的示例,我将回复您的原始帖子。 :)

标签: azure-batch


【解决方案1】:

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

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

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

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

应用程序驻留在此处:

详情:

Readme 中也有 git 的详细信息,但作为 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

因此,如果用户设置了正确的包版本并且节点有应用 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 文件,其中包含运行应用程序的任务所需的应用程序二进制文件和支持文件。每个应用程序包代表一个特定版本的应用程序。+

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

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

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

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

步骤:

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

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

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

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

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

我成功运行的截图如下:

所以我可以看到 Test Success 打印在我的 stdout.txt 内部节点中,TaskApplication.exe 是此应用程序包的一部分。

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

其他友好截图:

【讨论】:

  • 非常感谢您详尽而详细的回答!欣赏它!不幸的是,我仍然遇到同样的错误。而且我认为问题在于没有应用程序文件夹或文件。你知道是什么原因造成的吗?另外,我看到您使用 CloudConfiguration 运行了测试,而我实际上正在为池使用 VM 配置。那会有什么不同吗?谢谢
  • 其实我刚刚发现了这个问题。我在将应用程序包添加到 VM 配置之前创建的 VM 池中测试应用程序包。
  • @J.B Awesome :) 很高兴它有帮助,很好,啊,是的,重要的是在使用之前,即引用 app kg 确保 app pkg 存在。
  • 如果您不介意,我还有一个关于应用程序包的快速问题。因此,如果我在创建池时添加了一个应用程序包以便将其安装在所有节点上,我是否可以从命令行在我的所有任务中调用它,或者我是否需要像我一样在每个任务中从头开始引用它如果有意义,在添加特定于任务的应用程序包时会做什么?
  • 太棒了!这回答了我的问题!感谢您消除混乱:)!
猜你喜欢
  • 1970-01-01
  • 2022-12-12
  • 2015-05-12
  • 2018-12-21
  • 2020-06-19
  • 2020-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多