Статьи

Получите артефакты TeamCity, используя HTTP, Ant, Gradle и Maven


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

Конфигурация сборки «id»

Прежде чем вы получите артефакты какой-либо конфигурации сборки, вам необходимо знать ее «идентификатор», который можно увидеть в браузере при просмотре соответствующей конфигурации. Давайте возьмем в качестве примера проект IntelliJ IDEA Community Edition, размещенный на teamcity.jetbrains.com . Его конфигурация сборки «Community Dist» предоставляет ряд артефактов, с которыми мы собираемся поиграть. И, как видно на скриншоте ниже, его «id»«bt343» .

HTTP

Анонимный HTTP-доступ, вероятно, является самым простым способом получения артефактов TeamCity, для этого необходимо выполнить следующие действия:

HTTP: // сервер / guestAuth / хранилище / загрузки / <БТН> / <BuildNumber> / <artifactName>

Для этого запроса на работу необходимо указать 3 параметра:

БТН Создайте конфигурацию «id» , как указано выше.
номер сборки Номер сборки или одна из предопределенных констант: «lastSuccessful», «lastPinned» или «lastFinished». Например, вы можете загружать периодические сборки IDEA из последнего успешного выполнения TeamCity.
artifactName Название артефакта типа «ideaIC-118.SNAPSHOT.win.zip» . Может также принимать форму «artifactName! ArchivePath» для чтения содержимого архива, например файла сборки IDEA . Вы можете получить список всех артефактов, созданных в определенной сборке, запросив специальный артефакт «teamcity-ivy.xml», созданный TeamCity.

Муравей + Плющ

Все артефакты, опубликованные в TeamCity, сопровождаются дескриптором Ivy «teamcity-ivy.xml» , что делает TeamCity репозиторием Ivy. Приведенный ниже код загружает файл «core / annotations.jar» из дистрибутива IDEA в каталог «download / ivy» :

«Ivyconf.xml»

<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»

<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»

<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»

import org.jetbrains.annotations.NotNull;
 
public class Test
{
    private final String data;
    public Test ( @NotNull String data ){ this.data = data; }
}

«Build.gradle»

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»

<?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
 
http://maven.apache.org/maven-v4_0_0.xsd">
 
    <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 . Не стесняйтесь клонировать и запустить его:

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. Какой вы используете? Дай мне знать!