Переименуйте или разверните дополнительные файлы в Azure Web App - PullRequest
1 голос
/ 08 апреля 2019

В рамках моего конвейера выпуска в DevOps Azure я хочу переименовать некоторые .config файлы в .config.disabled после того, как моя задача «Развернуть службу приложений Azure» будет выполнена.

Я попытался добавить дополнительную задачу «Развернуть службу приложений Azure», но, похоже, она перезаписывает предыдущую, оставляя только файлы .config.disabled в wwwroot.

Есть ли другой способ (кроме задачи загрузки по FTP), который можно использовать для переименования / развертывания подмножества файлов в веб-приложении Azure?

1 Ответ

1 голос
/ 09 апреля 2019

Если вы не хотите использовать FTP, возможно, вам удастся использовать службу Kudu , которая поддерживает веб-приложение Azure.

Чтобы просмотреть сервис Kudu, перейдите к https://<<em>your -web-app-name >. scm .azurewebsites.net

После проверки подлинности вы обнаружите, что есть способ просматривать файлы, просматривать запущенные процессы и интерактивную консоль, позволяющую выполнять основные команды DOS или PowerShell для файловой системы.

Интерактивная консоль великолепна, но для ее автоматизации вы можете вводить команды для файловой системы, используя REST API.

Существует несколько примеров выдачи команд на сервер . В PowerShell:

# authenticate with Azure
Login-AzureRmAccount
$resoureGroupName = "your-web-app-name"
$websiteName = "your-resource-group-name"

$env = @{
     command= 'Set COMPUTERNAME'
     dir= 'site'
}
$json = $env | ConvertTo-Json

$env2 = @{
     command= 'copy filename.config file.config.notused'
     dir= 'site\wwwroot'
}
$json2 = $env2 | ConvertTo-Json

$env3 = @{
     command= 'delete filename.config'
     dir= 'site\wwwroot'
}
$json3 = $env3 | ConvertTo-Json

# setup auth header
$website = Get-AzureWebsite -Name $websiteName
$username = $website.PublishingUsername
$password = $website.PublishingPassword
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username,$password)))

$apiBaseUrl = "https://$($website.Name).scm.azurewebsites.net/api"
[System.Uri]$Uri = $apiBaseUrl

# get all the vms in the web-app
$instances = Get-AzureRmResource -ResourceGroupName $resoureGroupName `
                                -ResourceType Microsoft.Web/sites/instances `
                                -ResourceName $websiteName `
                                -ApiVersion 2018-02-01

#loop through instances
foreach($instance in $instances)
{
    $instanceName = $instance.Name
    Write-Host "`tVM Instance ID `t`t: " $instanceName

    #Now execute 'SET COMPUTER' cmd
    $cookie= New-Object System.Net.Cookie
    $cookie.Name = "ARRAffinity"
    $cookie.Value = $instanceName
    $Cookie.Domain = $uri.DnsSafeHost
    $session=New-Object Microsoft.Powershell.Commands.WebRequestSession
    $session.Cookies.add($cookie)
     $response = Invoke-RestMethod -Uri "$apiBaseUrl/command" `
                                -Headers @{Authorization=("Basic {0}" `
                                -f $base64AuthInfo)} `
                                -Method Post -Body $json `
                                -ContentType 'application/json' `
                                -WebSession $session
    Write-Host "`tVM Instance Name `t: " $response

    # perform copy file
    $response = Invoke-RestMethod -Uri "$apiBaseUrl/command" `
                               -Headers @{Authorization=("Basic {0}" `
                               -f $base64AuthInfo)} `
                               -Method Post -Body $json2 `
                               -ContentType 'application/json' `
                               -WebSession $session
    Write-Host "`tCopy file result `t: " $response

    # perform delete file
    $response = Invoke-RestMethod -Uri "$apiBaseUrl/command" `
                               -Headers @{Authorization=("Basic {0}" `
                               -f $base64AuthInfo)} `
                               -Method Post -Body $json3 `
                               -ContentType 'application/json' `
                               -WebSession $session
    Write-Host "`tCopy file result `t: " $response
 }    

Файловая система поддерживает основные команды, такие как copy и delete , так что вы можете легко переименовать файл.

...