Включение узловых модулей в развертывание Azure через VSTS

У меня есть служба приложений Azure, которую мне нужно развернуть как часть определения выпуска в VSTS. Чтобы обеспечить некоторый контекст, это приложение ASP.NET MVC, использующее Angular 2. У него также есть файл package.json. У меня есть определение сборки VSTS, которое включает задачу «npm install» для установки всех зависимостей из package.json, так что мне не нужно проверять все модули узла. В конце сборки файлы удаляются в общий ресурс без папки node_modules.

У меня есть соответствующее определение выпуска для веб-развертывания, построенного на лазурном. Однако я не уверен, как получить папку node_modules на лазурном компьютере. Может ли кто-нибудь помочь или дать предложения по этому сценарию? Я надеялся, что пакеты можно будет каким-то образом установить на производственную машину с помощью npm.


person AgentHunt    schedule 10.05.2017    source источник
comment
Весь пакет сборки должен включать все зависимости, почему вы публикуете пакет сборки для совместного использования без папки node_modules в конце сборки?   -  person Eddie Chen - MSFT    schedule 15.05.2017


Ответы (1)


Вы можете сделать это, используя Kudu API с PowerShell. Например (package.json находится в папке wwwroot)

  1. Добавить шаг / задачу Azure PowerShell (аргументы сценария: -resourceGroupName VS-starain2-Group -webAppName tempappstarain -dir "site \ wwwroot" -command "npm install")

Сценарий PowerShell:

param(
    [string]$resourceGroupName,
    [string]$webAppName,
    [string]$slotName="", 
    [string]$dir,
    [string]$command
)

function Get-AzureRmWebAppPublishingCredentials($resourceGroupName, $webAppName, $slotName = $null){
    if ([string]::IsNullOrWhiteSpace($slotName)){
        $resourceType = "Microsoft.Web/sites/config"
        $resourceName = "$webAppName/publishingcredentials"
    }
    else{
        $resourceType = "Microsoft.Web/sites/slots/config"
        $resourceName = "$webAppName/$slotName/publishingcredentials"
    }
    $publishingCredentials = Invoke-AzureRmResourceAction -ResourceGroupName $resourceGroupName -ResourceType $resourceType -ResourceName $resourceName -Action list -ApiVersion 2015-08-01 -Force
    Write-Host $publishingCredentials   
    return $publishingCredentials
}
function Get-KuduApiAuthorisationHeaderValue($resourceGroupName, $webAppName, $slotName = $null){
    $publishingCredentials = Get-AzureRmWebAppPublishingCredentials $resourceGroupName $webAppName $slotName
    Write-Host $publishingCredentials.Properties.PublishingUserName
    Write-Host $publishingCredentials.Properties.PublishingPassword
    return ("Basic {0}" -f [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $publishingCredentials.Properties.PublishingUserName, $publishingCredentials.Properties.PublishingPassword))))
}

function RunCommand($dir,$command,$resourceGroupName, $webAppName, $slotName = $null){
    $kuduApiAuthorisationToken = Get-KuduApiAuthorisationHeaderValue $resourceGroupName $webAppName $slotName
    $kuduApiUrl="https://$webAppName.scm.azurewebsites.net/api/command"
    $Body = 
      @{
      "command"=$command;
       "dir"=$dir
       } 
    $bodyContent=@($Body) | ConvertTo-Json
    Write-Host $bodyContent
     Invoke-RestMethod -Uri $kuduApiUrl `
                        -Headers @{"Authorization"=$kuduApiAuthorisationToken;"If-Match"="*"} `
                        -Method POST -ContentType "application/json" -Body $bodyContent
}

RunCommand $dir $command $resourceGroupName $webAppName

Статья по теме: Взаимодействие с виртуальной файловой системой веб-приложений Azure с помощью PowerShell и Kudu API

Вы также можете просто развернуть папку и файлы node_module в веб-приложении azure с помощью развертывания службы приложений Azure (выберите 3. * версию шага / задачи, не устанавливайте флажок Опубликовать с помощью параметра веб-развертывание. Пакет или foder: [путь к папке node_module])

person starian chen-MSFT    schedule 11.05.2017
comment
В этом примере вы указали каталог как site \ wwwroot. Как мне узнать, в какой каталог развернуты файлы, если у меня нет доступа к лазурному компьютеру? Есть ли для этого какая-то переменная среды? - person AgentHunt; 11.05.2017
comment
Я также думаю, что если все, что я хочу сделать, это установить npm, я смогу запустить сценарий PowerShell с помощью команды «npm install». Тогда зачем мне использовать Kudu api? - person AgentHunt; 11.05.2017
comment
@AgentHunt Вы можете попытаться получить доступ к https: // [webapp] .scm.azurewebsites.net / ›Консоль отладки› CMD, затем проверьте файлы. По умолчанию все файлы развертываются в папке wwwroot (site \ wwwroot), поэтому, если package.json находится в корневой папке, вы можете использовать site \ wwwroot. - person starian chen-MSFT; 11.05.2017
comment
@AgentHunt Я предполагаю, что запуск сценария powershell с npm install означает запуск файла сценария во время сборки / выпуска, а затем он просто устанавливает пакеты в агент сборки вместо службы приложений Azure. Этот API Kudu используется для службы приложений Azure. В любом случае вы можете развернуть папку node_module с файлами в службе приложений Azure напрямую, используя шаг / задачу развертывания службы приложений Azure или включив папку node_module в файл проекта или пакета. Таким образом, вам не нужно использовать Kudu API для запуска команды. - person starian chen-MSFT; 11.05.2017
comment
Я закончил тем, что добавил установку npm, за которой следовала задача «Копировать файлы» для node_modules, чтобы скопировать файлы непосредственно в общий ресурс вместе с другими файлами. Затем я включил все файлы в развертывание Azure. - person AgentHunt; 15.05.2017