Проблема: В настоящее время я использую сценарий PS, который загружает последний артефакт сборки по ссылке Appveyor, а затем извлекает этот артефакт поверх существующей программы при вызове функции независимо от того, была лиобновлять или нет .
Я использую это, чтобы поддерживать несколько проектов с открытым исходным кодом на сервере в актуальном состоянии для тестирования, и мне неудобно продолжать использовать эту же функцию для слепой загрузки и установки «обновлений» при «обновлении»"может и не быть более новой версией.Вот пример того, что я использую:
function Update-program
{
Clear-Host
Write-Host "Updating Program..."
Write-Host " "
if ( -not (Test-Path "$downloadLocation\Here" -PathType Container))
{
New-Item -Path "$downloadLocation\Here" -ItemType directory -Force
}
$apiUrl = 'https://ci.appveyor.com/api'
$headers = @{
"Authorization" = "Bearer $token"
"Content-type" = "application/json"
}
$accountName = 'Hello'
$projectSlug = 'World'
# get project with last build details
$project = Invoke-RestMethod -Method Get -Uri "$apiUrl/projects/$accountName/$projectSlug" -Headers $headers
# we assume here that build has a single job
# get this job id
$jobId = $project.build.jobs[0].jobId
# get job artifacts (just to see what we've got)
$artifacts = Invoke-RestMethod -Method Get -Uri "$apiUrl/buildjobs/$jobId/artifacts" -Headers $headers
# here we just take the first artifact, but you could specify its file name
# $artifactFileName = 'MyWebApp.zip'
$artifactFileName = $artifacts[0].fileName
# artifact will be downloaded as
$localArtifactPath = "$downloadLocation\$artifactFileName"
# download artifact
# -OutFile - is local file name where artifact will be downloaded into
# the Headers in this call should only contain the bearer token, and no Content-type, otherwise it will fail!
Invoke-RestMethod -Method Get -Uri "$apiUrl/buildjobs/$jobId/artifacts/$artifactFileName" `
-OutFile $localArtifactPath -Headers @{ "Authorization" = "Bearer $token" }
Clear-Host
Write-Host "Download complete, extracting..."
Write-Host " "
Expand-Archive -LiteralPath "$downloadLocation\$artifactFileName" -DestinationPath "$ProgramDir" -Force
Clear-Host
Write-Host "Program updated"
Write-Host " "
Желаемое решение: Я бы хотел, чтобы скрипт автоматически проверял Appveyor на наличие нового артефакта (возможно,путем сравнения имен артефактов или номеров версий сборки) в настраиваемом интервале времени.Если артефакт действительно НОВЫЙ, чем загруженная в данный момент версия, он загрузит и извлечет этот артефакт поверх существующей программы.Если он не новее, он сообщит, что «более новая версия недоступна».
Возможные препятствия: Я не уверен, поддерживает ли API Appveyor это или нет.Я не смог найти никаких убедительных доказательств во время моего исследования, но я был бы удивлен, если бы он не поддерживал что-то подобное.