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