В рамках конвейера выпуска в Azure DevOps я хочу переименовать некоторые файлы .config
в .config.disabled
после завершения задачи «Развертывание службы приложений Azure».
Я попытался добавить дополнительную задачу «Развертывание службы приложений Azure», но она, похоже, перезаписывает предыдущую, оставляя только файлы .config.disabled
в wwwroot.
Есть ли другой способ (кроме задачи загрузки по FTP), который можно использовать для переименования/развертывания подмножества файлов в веб-приложении Azure?
Мне нужно запустить скрипт, который требует, чтобы сайт был в сети, и когда скрипт запустится, мне нужно отключить возможность повторного запуска этого скрипта. Сценарий выполняет некоторую синхронизацию базы данных, и, чтобы избежать случайного запуска сценария, я хочу отключить его, как только я его запустил (путем отключения файлов .config)
Если вы не хотите использовать FTP, вы можете попытаться использовать Куду сервис, поддерживающий веб-приложение Azure.
Чтобы просмотреть службу Kudu, перейдите по адресу https://<ваше-имя-веб-приложения>.скм.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
}
Файловая система поддерживает основные команды, такие как копировать и удалять, поэтому вы можете легко переименовать файл.
Спасибо! Я заметил вверху «Login-AzureRmAccount» — как это будет работать в Azure DevOps? Смогу ли я передать некоторые учетные данные?
Даже лучше. Используйте задачу Azure PowerShell, чтобы установить подключение службы к вашей подписке Azure. Задача PowerShell будет выполняться в этом контексте.
И, поскольку вы новичок: если это ответит на ваш вопрос, не могли бы вы принять ответ (и проголосовать за него)?
Зачем изменять после, когда можно было изменить раньше?