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

时间:2017-05-10 15:49:01

标签: node-modules azure-deployment azure-pipelines-release-pipeline

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

我有一个相应的发布定义,用于构建到azure的Web部署。但是,我不知道如何在azure机器上获取node_modules文件夹。 有人可以帮助或提供这种情况的建议吗?我希望这些软件包能以某种方式安装在prod机器上。

1 个答案:

答案 0 :(得分:2)

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

  1. 添加Azure PowerShell步骤/任务(脚本参数:-resourceGroupName VS-starain2-Group -webAppName tempappstarain -dir" site \ wwwroot" -command" npm install")
  2. 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将node_module文件夹和文件部署到azure Web应用程序(选择3. *版本的步骤/任务,不要选中使用Web Deploy发布选项。包或foder:[node_module文件夹路径])