Автоматизиране на внедряването на приложения в Azure с LocalResource

В момента се опитвам да автоматизирам внедряването на приложение към роля на Azure Worker, като изтегля файл в ролята от хранилището на blob и работя с него чрез пакетен скрипт, също разположен в хранилището на blob. Използвам 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:\.

Не съм сигурен как да направя нито едното, нито какво би било най-доброто нещо, което да направя тук. мисли?


person SB2055    schedule 06.08.2012    source източник
comment
Друга възможност е да прехвърлите пътя към локалното хранилище като вход към партидния файл. напр. ако имам пакетен файл, наречен mycmd.bat като този по-долу: ============= ECHO %1 ============== Ако извикам mycmd.bat C:\Program Files, той просто ще отпечата C:\Program Files на конзолата.   -  person Gaurav Mantri    schedule 06.08.2012


Отговори (1)


Не бих променил LocalStorage да използва C: (как бихте направили това все пак?). Разгледайте публикацията в блога на Стив: Използване на Локален ресурс за съхранение от стартираща задача. Той обяснява как можете да получите LocalResource с помощта на powershell (и дори да извикате този скрипт от партиден файл).

А защо не използвате 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

person Sandrino Di Mattia    schedule 06.08.2012