通过 VSTS 在 azure 部署中包含节点模块

Include node modules in azure deployment via VSTS

我有一个 Azure 应用程序服务,我需要将其作为 VSTS 中发布定义的一部分进行部署。 为了提供一些上下文,它是一个 ASP.NET MVC 应用程序并使用 Angular 2。它还有一个 package.json 文件。我有一个 VSTS 构建定义,其中包括一个 'npm install' 任务来安装来自 package.json 的所有依赖项,因此我不需要签入所有节点模块。在构建结束时,文件被放到没有 node_modules 文件夹的共享中。

我有一个相应的发布定义来部署到 Azure 的网络部署。但是,我不确定如何在 azure 机器上获取 node_modules 文件夹。 有人可以为这种情况提供帮助或提供建议吗?我希望这些软件包可以通过某种方式 npm 安装在产品机器上。

您可以通过将 Kudu API 与 PowerShell 一起使用来实现。例如(package.json 在 wwwroot 文件夹中)

  1. 添加 Azure PowerShell step/task(脚本参数:-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

相关文章:Interacting with Azure Web Apps Virtual File System using PowerShell and the Kudu API

您也可以使用 Azure App Service Deploy(Select 3.* 版本的 step/task,仅将 node_module 文件夹和文件部署到 azure web 应用程序,不要勾选 Publish using Web 部署选项。包或文件夹:[node_module 文件夹路径])