2

Я работал с DSC, и я думаю, что это потрясающая платформа. Я сделал несколько тестов для автоматизации развертывания наших выходов сборки TFS и автоматической установки веб-приложений и настройки среды.Как передать выходные файлы сборки в Azure VM с помощью PowerShell DSC?

Это было относительно легко, так как я мог передать свой путь к папке с папкой DSC, используя общий доступ к файлам в нашей внутренней сети, и использовать относительные пути внутри конфигурации для выбора каждого из наших модулей.

Моя проблема теперь в том, как расширить это до виртуальных машин Azure. Мы хотели создать эти сценарии для автоматического развертывания на наших серверах QA и Production, которые размещаются на Azure. Поскольку они не находятся в нашем домене, я больше не могу использовать ресурс File для передачи файлов, но в то же время я хочу точно такую ​​же функциональность: я хотел бы как-то указать конфигурацию на нашу выходную папку сборки и скопировать файлы оттуда к виртуальным машинам.

Можно ли каким-либо образом скопировать файлы папок в папку из конфигурации, которая выполняется на этих удаленных компьютерах, без совместного использования одной и той же сети и домена? Я успешно настроил виртуальные машины, чтобы принимать вызовы DSC через https с помощью сертификатов, и я только что узнал, что the Azure PowerShell cmdlets enable you to upload a configuration to Azure storage and run it in the VMs automatically (что кажется намного лучше, чем то, что я сделал), но я до сих пор не знаю, как получить доступ к моим выводам сборки из внутри виртуальной машины при запуске скрипта конфигурации.

+1

Реализация DSC управления релизом помещает выходы сборки в учетную запись Azure. Вы занимались этим? –

+0

@ DanielMann Я не знал, что RM сделал это, интересно. Это где-то задокументировано? Это то, что я, вероятно, в конечном итоге сделаю, теперь, когда я думаю об этом. Мне просто нужно как-то добавить мои файлы для распаковки в zip, которые опубликованы в azure storage, а затем мне не нужен прямой доступ к капелькам. Я хотел бы держаться подальше от новых конвейеров, потому что они _only_ поддерживают задачи развертывания ... для меня этого недостаточно, мне нужно запускать произвольные действия в рабочем процессе, как я уже упоминал в другом вопросе, для развертывания моих андроидных апк например, в Google. – julealgon

+0

Я не думаю, что он документирован где-нибудь, но, предположительно, он использует Azure SDK для выталкивания двоичных файлов из сервера build/RM в хранилище Azure, а затем выполняет что-то на цели развертывания для загрузки двоичных файлов из хранилища Azure. API Azure может определенно сделать это, так что это просто вопрос взлома ваших собственных. –

ответ

1

Я закончил с использованием Publish-AzureVMDscExtension используется для создания локального файла почтового индекса, добавив мои сборки выходов на молнию, а затем публиковать молнию, то вдоль этих линий:

function Publish-AzureDscConfiguration 
{ 
    [CmdletBinding()] 
    Param(
     [Parameter(Mandatory)] 
     [string] $ConfigurationPath 
    ) 

    Begin{} 
    Process 
    { 
     $zippedConfigurationPath = "$ConfigurationPath.zip"; 

     Publish-AzureVMDscConfiguration -ConfigurationPath:$ConfigurationPath -ConfigurationArchivePath:$zippedConfigurationPath -Force 

     $tempFolderName = [System.Guid]::NewGuid().ToString(); 
     $tempFolderPath = "$env:TEMP\$tempFolderName"; 
     $dropFolderPath = "$tempFolderPath\BuildDrop"; 

     try{ 
      Write-Verbose "Creating temporary folder and symbolic link to build outputs at '$tempFolderPath' ..."; 
      New-Item -ItemType:Directory -Path:$tempFolderPath; 
      New-Symlink -LiteralPath:$dropFolderPath -TargetPath:$PWD; 
      Invoke-Expression ".\7za a $tempFolderPath\BuildDrop.zip $dropFolderPath -r -x!'7za.exe' -x!'DscDeployment.ps1'"; 

      Write-Verbose "Adding component files to DSC package in '$zippedConfigurationPath'..."; 
      Invoke-Expression ".\7za a $zippedConfigurationPath $dropFolderPath.zip"; 
     } 
     finally{ 
      Write-Verbose "Removing symbolic link and temporary folder at '$tempFolderPath'..."; 
      Remove-ReparsePoint -Path:$dropFolderPath; 
      Remove-Item -Path:$tempFolderPath -Recurse -Force; 
     } 
     Publish-AzureVMDscConfiguration -ConfigurationPath:$zippedConfigurationPath -Force 
    } 
    End{} 
} 

Используя молнию внутри zip, используемый Azure, я могу получить доступ к внутреннему содержимому в рабочем каталоге расширения DSC PowerShell (в папке DSCWork). Я попробовал просто добавить папку для распаковки непосредственно в zip (без первой записи), но затем DSC Extension копирует папку в путь к модулю, считая ее модулем.

Я еще не доволен этим решением, и у меня есть a few problems already, но это имеет смысл в моем сознании и должно работать нормально.