我有一个azure app服务,我需要在VSTS中作为发布定义的一部分进行部署。 为了提供一些上下文,它是一个ASP.NET MVC应用程序并使用Angular 2.它还有一个package.json文件。我有一个VSTS构建定义,包括一个&nbsp安装'任务从package.json安装所有依赖项,以便我不需要签入所有节点模块。在构建结束时,文件将被删除到没有node_modules文件夹的共享。
我有一个相应的发布定义,用于构建到azure的Web部署。但是,我不知道如何在azure机器上获取node_modules文件夹。 有人可以帮助或提供这种情况的建议吗?我希望这些软件包能以某种方式安装在prod机器上。
答案 0 :(得分:2)
您可以通过在PowerShell中使用Kudu API来实现。例如(package.json在wwwroot文件夹中)
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文件夹路径])