構建配置“ 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