Каким образом вы можете получить артефакты 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» :
<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-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>
<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 :
import org.jetbrains.annotations.NotNull;
public class Test
{
private final String data;
public Test ( @NotNull String data ){ this.data = data; }
}
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.
<?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 — Шаблоны для доступа к артефактам сборки
- TeamCity — доступ к серверу по HTTP
- TeamCity — Настройка зависимостей артефактов с помощью Ant Build Script
- Gradle — хранилище плюща
- «Плющ-Maven-плагин»
Вот и все, вы уже видели — артефакты TeamCity идеально доступны с помощью любого из 4 способов: прямой HTTP-доступ, Ant + Ivy, Gradle или Maven. Какой вы используете? Дай мне знать!
