在使用buildnumber计算ant构建脚本内部的新版本号时,ivy在计算下一个版本时将挂起长达20分钟。随着构建数量的增加,它似乎呈指数级增长(我正在测试的项目大约有600个)。一开始我以为这可能是因为大文件和哈希检查,但后来我打开调试,看到了大约1200次:
[ivy:buildnumber] using ssh to list all in /Storage/ivy/status/base//module/version
[ivy:buildnumber] SShRepository:list called: /Storage/ivy/status/base//module/version
[ivy:buildnumber] found 12 urls
[ivy:buildnumber] 0 matched /Storage/ivy/status/base//module/version/[artifact]-version.jar
出于某种原因,它会在每个目录中循环查找一些jar文件,当它找不到它要查找的内容时,它会转到第二个解析程序并重试。当然,它从来没有找到匹配项,因为在任何目录中都没有jar。
ivysettings文件如下所示:
<ivysettings>
<property name="ivy.checksums" value="" />
<property name="tisivy.host" value="builds.example.com" />
<property name="tisivy.url.path" value="http://${tisivy.host}" />
<property name="tisivy.file.path" value="/Storage/ivy" />
<property name="tisivy.repo.pattern" value="[module]/[revision]" />
<property name="tisivy.artifact.pattern" value="${tisivy.repo.pattern}/[artifact]-[revision].[ext]" />
<settings defaultResolver="url-chain" />
<caches/>
<resolvers>
<chain name="url-chain" returnFirst="true">
<url name="http">
<ivy pattern="${tisivy.url.path}/status/${tisivy.repo.pattern}/ivy.xml" />
<artifact pattern="${tisivy.url.path}/status/${tisivy.artifact.pattern}" />
</url>
</chain>
<ssh name="ssh" user="example" userPassword="****************" host="${tisivy.host}" publishPermissions="0644">
<ivy pattern="${tisivy.file.path}/status/${tisivy.repo.pattern}/ivy.xml" />
<artifact pattern="${tisivy.file.path}/status/${tisivy.artifact.pattern}" />
</ssh>
</resolvers>
<triggers>
</triggers>
<statuses>
<status name="production" integration="false" />
<status name="integration" integration="true" />
<status name="status" integration="false" />
</statuses>
<modules>
</modules>
</ivysettings>
内部版本号的调用如下所示:<ivy:buildnumber organisation="org" module="${ivy.module.doubleslash}" revision="${version.base}" />
我似乎找不到其他人遇到这个问题,所以我确信我在某个地方犯了错误。
我通常会告诉buildnumber任务要使用哪个解析器:
<ivy:buildnumber resolver="url-chain"
organisation="${ivy.organisation}"
module="${ivy.module}"
revision="${version.base}"/>
文档描述了默认行为是如何搜索所有可用的解析器的。(这是有道理的,您发布到的回购可能不在默认的解析器设置中)。
注:
- 我使用ivy.organization和ivy.module变量,因为它们是从我的ivy文件的"info"标签中自动设置的