2015-07-29 4 views
0

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

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

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


EDIT:

Другой 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, но предпочел бы более простой подход.

ответ

3

К сожалению, артефакты TeamCity недоступны для просмотра. Обычные обходные пути, такие как wget recursive download или wildcards, неприменимы.

Using wildcards in wget or curl query How do I use Wget to download all Images into a single Folder

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

Я нашел вы можете форматировать 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")

+0

Я был в состоянии заставить его работать с 'HTTP: // TeamCity/guestAuth/приложение/отдых/строит/отрасль: , buildType: , статус: УСПЕХ, состояние: готово/артефакты/<путь к артефакту> '. Благодаря! – Speerian

Смежные вопросы