Конфигурация сборки «id»
Прежде чем вы получите артефакты какой-либо конфигурации сборки, вам необходимо знать ее "id"
который можно увидеть в браузере при просмотре соответствующей конфигурации. Давайте возьмем в качестве примера проект IntelliJ IDEA Community Edition, размещенный на teamcity.jetbrains.com . Его конфигурация сборки «Community Dist» предоставляет ряд артефактов, с которыми мы собираемся поиграть. И, как видно на скриншоте ниже, его "id"
— "bt343"
.
HTTP
Анонимный HTTP-доступ, вероятно, является самым простым способом получения артефактов TeamCity, для этого необходимо выполнить следующие действия:
http://server/guestAuth/repository/download/<btN>/<buildNumber>/<artifactName>
Для этого запроса на работу необходимо указать 3 параметра:
btN |
Создайте конфигурацию "id" , как указано выше. |
buildNumber |
Номер сборки или одна из предопределенных констант: "lastSuccessful" , "lastPinned" или "lastFinished" . Например, вы можете загружать периодические сборки IDEA из последнего успешного выполнения TeamCity. |
artifactName |
Название артефакта типа "ideaIC-118.SNAPSHOT.win.zip" . Может также принимать форму "artifactName!archivePath" для чтения содержимого архива, например файла сборки IDEA. Вы можете получить список всех артефактов, созданных в определенной сборке, запросив специальный артефакт "teamcity-ivy.xml" созданный TeamCity. |
Муравей + Плющ
Все артефакты, опубликованные в TeamCity, сопровождаются "teamcity-ivy.xml"
Ivy "teamcity-ivy.xml"
, что делает TeamCity репозиторием Ivy. Приведенный ниже код загружает файл "core/annotations.jar"
из дистрибутива IDEA в каталог "download/ivy"
:
1
2
3
4
5
6
7
8
9
|
< ivysettings > < settings defaultResolver = 'teamcity-repo' /> < resolvers > < url name = 'teamcity-repo' alwaysCheckExactRevision = 'yes' checkmodified = 'true' > < ivy pattern = 'http://teamcity.jetbrains.com/guestAuth/repository/download/[module]/[revision]/teamcity-ivy.xml' /> < artifact pattern = 'http://teamcity.jetbrains.com/guestAuth/repository/download/[module]/[revision]/[artifact](.[ext])' /> </ url > </ resolvers > </ ivysettings > |
1
2
3
4
5
6
7
8
|
< ivy-module version = "1.3" > < info organisation = "com.jetbrains" module = "idea" /> < dependencies > < dependency org = "org" name = "bt343" rev = "lastSuccessful" > < include name = "core/annotations" ext = "jar" /> </ dependency > </ dependencies > </ ivy-module > |
1
2
3
4
5
6
7
8
|
< project name = "teamcity-download" default = "download" xmlns:ivy = "antlib:org.apache.ivy.ant" > < target name = "download" xmlns:ivy = "antlib:org.apache.ivy.ant" > < taskdef uri = "antlib:org.apache.ivy.ant" resource = "org/apache/ivy/ant/antlib.xml" /> < ivy:configure file = "${basedir}/ivyconf.xml" /> < ivy:resolve file = "${basedir}/ivy.xml" /> < ivy:retrieve pattern = "${basedir}/download/ivy/[artifact].[ext]" /> </ target > </ project > |
Gradle
Как и в приведенном выше примере с Ivy, довольно легко получить артефакты TeamCity с помощью Gradle благодаря встроенной поддержке Ivy. В дополнение к загрузке того же jar-файла в каталог "download/gradle"
с пользовательской задачей Gradle, давайте использовать его как зависимость "compile"
для нашего Java-класса, импортируя аннотацию IDEA @NotNull
:
1
2
3
4
5
6
7
|
import org.jetbrains.annotations.NotNull; public class Test { private final String data; public Test ( @NotNull String data ){ this .data = data; } } |
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
|
apply plugin: 'java' repositories { ivy { ivyPattern 'http://teamcity.jetbrains.com/guestAuth/repository/download/[module]/[revision]/teamcity-ivy.xml' artifactPattern 'http://teamcity.jetbrains.com/guestAuth/repository/download/[module]/[revision]/[artifact](.[ext])' } } dependencies { compile ( 'org:bt343:lastSuccessful' ){ artifact { name = 'core/annotations' type = 'jar' } } } task copyJar( type: Copy ) { from configurations.compile into "${ project.projectDir }/download/gradle" } |
специалист
Лучший способ использовать Maven с TeamCity — это настроить менеджер хранилища Artifactory и его плагин TeamCity . Таким образом, артефакты, создаваемые вашими сборками, хорошо разворачиваются в Artifactory и могут обслуживаться оттуда, как и из любого другого удаленного хранилища Maven.
Однако вы все равно можете использовать артефакты TeamCity в Maven без каких-либо дополнительных настроек. "ivy-maven-plugin"
соединяет два мира, позволяя вам подключать распознаватели Ivy к среде выполнения Maven, загружать необходимые зависимости и добавлять их в соответствующие области "compile"
или "test"
.
Давайте скомпилируем тот же исходный код Java из примера Gradle, но на этот раз с использованием Maven.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
<? xml version = "1.0" encoding = "UTF-8" ?> xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 < modelVersion >4.0.0</ modelVersion > < groupId >com.test</ groupId > < artifactId >maven</ artifactId > < packaging >jar</ packaging > < version >0.1-SNAPSHOT</ version > < name >[${project.groupId}:${project.artifactId}:${project.version}]</ name > < description >Ivy Maven plugin example</ description > < build > < plugins > < plugin > < groupId >com.github.goldin</ groupId > < artifactId >ivy-maven-plugin</ artifactId > < version >0.2.5</ version > < executions > < execution > < id >get-ivy-artifacts</ id > < goals > < goal >ivy</ goal > </ goals > < phase >initialize</ phase > < configuration > < ivyconf >${project.basedir}/ivyconf.xml</ ivyconf > < ivy >${project.basedir}/ivy.xml</ ivy > < dir >${project.basedir}/download/maven</ dir > < scope >compile</ scope > </ configuration > </ execution > </ executions > </ plugin > </ plugins > </ build > </ project > |
Когда этот плагин запускается, он разрешает артефакт аннотаций IDEA, используя те же "ivyconf.xml"
и "ivy.xml"
которые мы видели ранее, копирует его в каталог "download/maven"
и добавляет в область "compile"
чтобы наши источники Java можно скомпилировать.
GitHub Project
Все продемонстрированные примеры доступны в моем проекте GitHub . Не стесняйтесь клонировать и запустить его:
1
2
3
4
|
git clone git: //github.com/evgeny-goldin/teamcity-download-examples.git cd teamcity-download-examples chmod +x run.sh dist/ant/bin/ant gradlew dist/maven/bin/mvn ./run.sh |
Ресурсы
Ссылки ниже могут предоставить вам более подробную информацию:
- TeamCity — Шаблоны для доступа к артефактам сборки
- TeamCity — доступ к серверу по HTTP
- TeamCity — Настройка зависимостей артефактов с помощью Ant Build Script
- Gradle — хранилище плюща
-
"ivy-maven-plugin"
Вот и все, вы видели это — артефакты TeamCity идеально доступны с помощью любого из 4 способов: прямой HTTP-доступ, Ant + Ivy, Gradle или Maven. Какой вы используете? Дай мне знать!
Ссылка: Получите артефакты TeamCity с использованием HTTP, Ant, Gradle и Maven от нашего партнера по JCG Евгения Голдина в блоге Goldin ++ .