Конфигурация сборки «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.gitcd teamcity-download-exampleschmod +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 ++ .
