我目前正在尝试通过将文件从blob存储中提取到角色并通过批处理脚本(也位于blob存储中)处理来自动将应用程序部署到Azure Worker角色。我正在使用onStart来实现这一目标。这是我的onStart方法的简化版本:
准备好拉下文件:
public override bool OnStart()
{
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("mycontainer");
container.CreateIfNotExist();
CloudBlob file = container.GetBlobReference("file.bat");
实际上将文件放入角色:
LocalResource localResource = RoleEnvironment.GetLocalResource("localStore");
string filePath = System.IO.Path.Combine(localResource.RootPath, "file.bat");
using (var fileStream = System.IO.File.OpenWrite(@filePath))
{
file.DownloadToStream(fileStream);
}
这是我将批处理文件和依赖项放入角色的方法。我现在的问题是 - 最初,我构建了批处理文件,假设其他文件将被放在C:\
上。例如 - C:\installer.exe
,C:\archive.zip
等。但现在文件位于localStorage中。
我想我可以A)以某种方式告诉批处理文件localStorage在哪里通过动态编写脚本onStart,或B)更改localStorage以使用C:\
。
我不知道该如何做,或者在这里做的最好的事情是什么。思考?
答案 0 :(得分:1)
我不会改变LocalStorage使用C :(你怎么会这样做?)。看一下Steve的博文:Using a Local Storage Resource From a Startup Task。他解释了如何使用powershell获取LocalResource(甚至从批处理文件中调用该脚本)。
为什么不使用Windows Azure Bootstrapper?这是一个小工具,可以帮助您配置您的角色,而无需编写任何代码,您只需从启动任务调用它,它可以下载文件(也像您正在做的blob存储),与本地工作资源,......
bootstrapper.exe -get http://download.microsoft.com/download/F/3/1/F31EF055-3C46-4E35-AB7B-3261A303A3B6/AspNetMVC3ToolsUpdateSetup.exe -lr $lr(temp) -run $lr(temp)\AspNetMVC3ToolsUpdateSetup.exe -args /q
注意:不要在批处理文件中使用绝对引用,而是使用%~dp0
使用相对路径