构建配置“ 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"
目录中:
"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>
摇篮
与上面的Ivy示例相同,由于其内置的Ivy支持,使用Gradle检索TeamCity工件相当容易。 除了使用自定义Gradle任务将相同的jar文件"download/gradle"
到"download/gradle"
目录外,我们还可以将其用作Java类的"compile"
依赖项,并导入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.compileinto "${ project.projectDir }/download/gradle"
}
马文
将Maven与TeamCity结合使用的最佳方法是设置Artifactory存储库管理器及其TeamCity插件 。 这样,您的构建所产生的工件就可以很好地部署到Artifactory,并且可以从那里从任何其他远程Maven存储库中进行服务。
但是,您仍然可以在Maven中使用TeamCity工件,而无需任何其他设置。 "ivy-maven-plugin"
桥接了两个世界,使您可以将Ivy解析器插入Maven的运行时环境,下载所需的依赖项,并将它们添加到相应的"compile"
或"test"
作用域中。
让我们从Gradle示例中编译相同的Java源代码,但是这次使用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.0http://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