Как передать выходные файлы сборки на виртуальную машину Azure с помощью PowerShell DSC?

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

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

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

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


person julealgon    schedule 23.10.2014    source источник
comment
Реализация DSC Release Management помещает выходные данные сборки в учетную запись хранения Azure. Вы пытались это сделать?   -  person Daniel Mann    schedule 26.10.2014
comment
@DanielMann Я не знал, что RM сделал это, интересно. Это где-то задокументировано? Это то, что я, вероятно, в конечном итоге сделаю, теперь, когда я думаю об этом. Мне просто нужно каким-то образом добавить файлы перетаскивания в zip-архив, опубликованный в лазурном хранилище, и тогда мне не понадобится прямой доступ к перетаскиваниям. Я хотел бы держаться подальше от новых конвейеров, потому что они только поддерживают задачи развертывания... этого мне недостаточно, мне нужно выполнять произвольные действия в рабочем процессе, как я упоминал в другом вопросе. , например, для развертывания моих Android-приложений в Google Play.   -  person julealgon    schedule 27.10.2014
comment
Я не думаю, что это где-либо задокументировано, но, предположительно, он использует Azure SDK для отправки двоичных файлов с сервера сборки/RM в хранилище Azure, а затем выполняет что-то в целевом объекте развертывания для загрузки двоичных файлов из хранилища Azure. API-интерфейсы Azure определенно могут это сделать, поэтому вам нужно просто собрать свои собственные.   -  person Daniel Mann    schedule 27.10.2014


Ответы (1)


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

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 внутри zip, используемого Azure, я могу получить доступ к внутреннему содержимому в рабочем каталоге расширения PowerShell DSC (в папке DSCWork). Я попытался просто добавить папку для перетаскивания непосредственно в zip (без предварительного архивирования), но затем расширение DSC копирует папку в путь к модулям, думая, что это модуль.

Я еще не совсем доволен этим решением, и у меня уже есть несколько проблем, но, на мой взгляд, это имеет смысл и должно работать нормально.

person julealgon    schedule 30.10.2014