Доступ к Teamcity Artifact с динамическим именем

Я хочу загрузить артефакт TeamCity через powershell. Это должна быть последняя успешная сборка конкретной ветки.

Я заметил два общих URL-адреса для доступа к артефактам. Один кажется /repository/download/BUILD_TYPE_EXT_ID/.lastSuccessful/ARTIFACT_PATH

Проблема в том, что файл в конце зависит от релизной версии. В TeamCity есть синтаксис для указания всех файлов \*.msi. Есть ли способ указать артефакт, начинающийся с FileName-{version.number}.msi, при попытке доступа к этому URL-адресу?


ИЗМЕНИТЬ:

Другой URL-адрес, который я заметил, относится к REST API.

http://teamcity/guestAuth/app/rest/builds/branch:[BRANCH],buildType:[BUILD TYPE],status:SUCCESS,state:finished/artifacts/[BUILD PATH] 

Проблема в том, что я не могу скачать артефакты отсюда. Если я хочу загрузить артефакты, я должен использовать текущий идентификатор сборки. Приведенный выше URL-адрес дает следующий URL-адрес: /guestAuth/app/rest/builds/id:[Build ID]/artifacts/content/[Artifact Path] для загрузки артефакта.

Я могу использовать первый URL-адрес REST, чтобы в конечном итоге получить второй через возвращенный xml, но предпочел бы более простой подход.


person Speerian    schedule 29.07.2015    source источник


Ответы (1)


К сожалению, поскольку артефакты TeamCity недоступны для просмотра, обычные обходные пути, такие как рекурсивная загрузка wget или подстановочные знаки, неприменимы.

Использование подстановочных знаков в запросе wget или curl Как использовать Wget для загрузки всех изображений в одну папку

Одним из обходных путей, который вы можете попробовать, является форматирование ссылки в задании, сохранение ссылки в текстовом файле и сохранение ее как артефакта со статическим именем. Тогда вам просто нужно скачать этот текстовый файл, чтобы получить ссылку.

Я обнаружил, что вы можете отформатировать URL-адрес артефакта в задании TeamCity, выполнив следующие действия:

%teamcity.serverUrl%/repository/download/%system.teamcity.buildType.id%/%teamcity.build.id%:id/<path_to_artifact>

В шаге командной строки. Вы можете записать это в файл, выполнив:

echo %teamcity.serverUrl%/repository/download/%system.teamcity.buildType.id%/%teamcity.build.id%:id/myMsi-1.2.3.4.msi > msiLink.txt"

Теперь у вас есть артефакт с постоянным именем, который указывает на установщик (или другой артефакт) с изменяющимся именем.

Если вы используете артефакт msiLink.txt, вам не нужно использовать интерфейс REST (это по-прежнему два вызова, оба через один и тот же интерфейс).

Вы можете легко загрузить последнюю версию из пакета/cmd, используя:

wget <url_server>/repository/download/BUILD_TYPE_EXT_ID/.lastSuccessful/msiLink.txt ---user #### --passsword #### set /P msi_url=<msiLink.txt wget %msi_url% --user #### --passsword ####

Надеюсь, поможет.

Обновление: извините, я только что понял вопрос, заданный для PowerShell:

$WebClient = New-Object System.Net.WebClient $WebClient.Credentials = New-Object System.Net.Networkcredential("yourUser", "yourPassword") $WebClient.DownloadFile( "<url_server>/repository/download/BUILD_TYPE_EXT_ID/.lastSuccessful/msiLink.txt", "msiLink.txt" ) $msi_link = [IO.File]::ReadAllText(".\msiLink.txt") $WebClient.DownloadFile( $msi_link, "yourPath.msi" )

person Tim Brown    schedule 04.02.2016
comment
Я смог заставить его работать с http://teamcity/guestAuth/app/rest/builds/branch:<branch>,buildType:<buildType>,status:SUCCESS,state:finished/artifacts/<path to artifact>. Спасибо! - person Speerian; 04.02.2016