TeamCity工件:HTTP,Ant,Gradle和Maven
构建配置“ id”
在检索任何构建配置的工件之前,您需要知道其"id"
,当浏览相应的配置时,可以在浏览器中看到它的"id"
。 让我们以teamcity.jetbrains.com上托管的IntelliJ IDEA社区版项目为例。 它的“ Community Dist”构建配置提供了许多我们将要使用的工件。 从下面的屏幕截图可以看出,其"id"
为"bt343"
。
HTTP
匿名HTTP访问可能是获取TeamCity工件的最简单方法,这样做的URL是:
http://server/guestAuth/repository/download/<btN>/<buildNumber>/<artifactName>
为了满足该要求,需要指定3个参数:
btN | 如上所述,构建配置"id" 。 |
buildNumber | 内部版本号或预定义常量之一: "lastSuccessful" , "lastPinned" 或"lastFinished" 。 例如,您可以从上一次成功的 TeamCity执行中下载定期的IDEA构建。 |
artifactName | 工件名称,例如"ideaIC-118.SNAPSHOT.win.zip" 。 也可以采用"artifactName!archivePath" 的形式来读取存档的内容,例如IDEA的生成文件 。 通过请求由TeamCity生成的特殊"teamcity-ivy.xml" 工件,可以获取在特定构建中生成的所有工件的列表。 |
蚂蚁+常春藤
发布到TeamCity的所有工件都带有"teamcity-ivy.xml"
Ivy描述符,从而有效地使TeamCity成为Ivy存储库。 下面的代码将IDEA发行版中的"core/annotations.jar"
"download/ivy"
到"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>
摇篮
与上面的Ivy示例相同,由于其内置的Ivy支持,使用Gradle检索TeamCity工件相当容易。 除了使用自定义Gradle任务将相同的jar文件"download/gradle"
到"download/gradle"
目录外,我们还可以将其用作Java类的"compile"
依赖项,并导入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存储库中进行服务。
但是,您仍然可以在Maven中使用TeamCity工件,而无需任何其他设置。 "ivy-maven-plugin"
桥接了两个世界,使您可以将Ivy解析器插入Maven的运行时环境,下载所需的依赖项,并将它们添加到相应的"compile"
或"test"
作用域中。
让我们从Gradle示例中编译相同的Java源代码,但是这次使用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>
当该插件运行时,它使用我们之前看到的相同的"ivyconf.xml"
和"ivy.xml"
文件解析IDEA注释工件,将其复制到"download/maven"
目录并添加到"compile"
作用域,因此我们的Java源代码可以编译。
GitHub项目
我的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脚本配置工件依赖项
- Gradle –常春藤仓库
-
"ivy-maven-plugin"
就这样,您已经看到了–可使用以下四种方式之一完美访问TeamCity工件:直接HTTP访问,Ant + Ivy,Gradle或Maven。 您使用哪一个? 让我知道!
参考:从Goldin ++博客的JCG合作伙伴 Evgeny Goldin 使用HTTP,Ant,Gradle和Maven获取TeamCity工件 。
翻译自: https://www.javacodegeeks.com/2012/05/teamcity-artifacts-http-ant-gradle-and.html