Статьи

Артефакты TeamCity: HTTP, Ant, Gradle и Maven

Каким образом вы можете получить артефакты TeamCity? Я говорю, из чего выбирать ! Если вы находитесь в мире инструментов сборки Java, вы можете использовать простой HTTP-запрос, Ant + Ivy, Gradle и Maven для загрузки и использования двоичных файлов, созданных конфигурациями сборки TeamCity. Как? Читать дальше.

Конфигурация сборки «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" :

"ivyconf.xml"

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>

"ivy.xml"

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>

"build.xml"

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 :

"Test.java"

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; }
}

"build.gradle"

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.

"pom.xml"

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"?>
 
<project xmlns              = "http://maven.apache.org/POM/4.0.0"
         xmlns:xsi          = "http://www.w3.org/2001/XMLSchema-instance"
         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 идеально доступны с помощью любого из 4 способов: прямой HTTP-доступ, Ant + Ivy, Gradle или Maven. Какой вы используете? Дай мне знать!

Ссылка: Получите артефакты TeamCity с использованием HTTP, Ant, Gradle и Maven от нашего партнера по JCG Евгения Голдина в блоге Goldin ++ .