我有一个小型Java项目设置,可以通过Hudson服务器不断构建 . 我想将构建工件作为构建后步骤发布到Artifactory服务器,所以,当然,我正在使用Hudson-Artifactory插件来实现这一点 . 本地发布似乎工作正常 - 它按预期发布两个工件(两个.jar文件)和已解析的ivy.xml文件 . 但是,当我在Hudson服务器上请求构建时,我的两个工件中只有一个被发布 .
构建创建以下工件:
ftpSvc.jar
ftpSvc-lib.jar
我的ivy.xml文件如下所示:
<?xml version="1.0" encoding="ISO-8859-1"?>
<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
<info organisation="esf"
status="integration"
module="ftpSvc"
revision="SNAPSHOT" />
<publications>
<artifact name="ftpSvc" ext="jar"/>
<artifact name="ftpSvc-lib" ext="jar" type="lib" />
</publications>
<!--list the dependencies of this project-->
<dependencies>
<dependency org="commons-net" name="commons-net" rev="1.3.0" />
</dependencies>
</ivy-module>
在 <publications>
部分中清楚地调出了两个工件 . 我的build.xml文件中的构建目标如下所示:
<target name="publish_local" description="publish artifacts locally">
<echo>organisation: ${ivy.organisation}</echo>
<echo>module: ${ivy.module}</echo>
<echo>status: ${ivy.status}</echo>
<echo>revision: ${ivy.revision}</echo>
<echo>local dir: ${ivy.default.ivy.user.dir}</echo>
<ivy:publish
resolver="local"
update="true"
verwrite="true"
srcivypattern="${bundle.jar.dir}/ivy.xml"
artifactspattern="${bundle.jar.dir}/[artifact].[ext]" />
</target>
artifactspattern
从构建目录中获取所有已定义的工件 - 这里没有任何花哨的东西 . 最后,我的ivysettings.xml文件中的解析器链看起来像这样(服务器名称已更改以保护无辜者):
<resolvers>
<chain name="main">
<ibiblio name="main" m2compatible="true" root="http://my.server.employer.com:8080/artifactory/repo" />
<filesystem name="local">
<ivy pattern="${ivy.default.ivy.user.dir}/local/[organisation]/[module]/[revision]/ivy-[revision].xml" />
<artifact pattern="${ivy.default.ivy.user.dir}/local/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
</filesystem>
</chain>
</resolvers>
这完全是常规的东西,如上所述,本地发布工作正常 . 通过Eclipse构建时,可以看一下控制台输出:
publish_local:
[echo] organisation: esf
[echo] module: ftpSvc
[echo] status: integration
[echo] revision: SNAPSHOT
[echo] local dir: C:\Users\myusername\.ivy2
[ivy:publish] :: publishing :: esf#ftpSvc
[ivy:publish] published ftpSvc to C:\Users\myusername\.ivy2/local/esf/ftpSvc/SNAPSHOT/ftpSvc-SNAPSHOT.jar
[ivy:publish] published ftpSvc-lib to C:\Users\myusername\.ivy2/local/esf/ftpSvc/SNAPSHOT/ftpSvc-lib-SNAPSHOT.jar
[ivy:publish] published ivy to C:\Users\myusername\.ivy2/local/esf/ftpSvc/SNAPSHOT/ivy-SNAPSHOT.xml
.jar文件和已解析的ivy.xml文件都按预期发布 . 在我的Hudson服务器上,我已经配置了Artifactory配置设置(同样,一些细节已被更改以模糊我真正的超级英雄身份):
Artifactory服务器: http://my.server.employer.com:8080/artifactory
目标存储库: target-repository
常 Spring 藤图案: [organisation]/[module]/[revision]ivy-[revision].xml
神器模式: "[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
如您所见,Ivy和Artifact模式与我的ivysettings.xml文件中本地解析器中的模式完全相同 . 因此,当构建在Hudson服务器上运行时,我希望将完全相同的工件发布到我的Artifactory服务器 .
让我们看看我的Hudson服务器上最新版本的控制台输出:
publish_local:
[echo] organisation: esf
[echo] module: ftpSvc
[echo] status: integration
[echo] revision: SNAPSHOT
[echo] local dir: /usr/share/tomcat6/.ivy2
[ivy:publish] :: publishing :: esf#ftpSvc
Collecting Module information for module: ftpSvc
Module location: /usr/share/tomcat6/.hudson/jobs/ftpSvc-ivy/workspace/trunk/out/jars/ftpSvc.jar
[ivy:publish] published ftpSvc to /usr/share/tomcat6/.ivy2/local/esf/ftpSvc/SNAPSHOT/ftpSvc-SNAPSHOT.jar
Collecting Module information for module: ftpSvc
Module location: /usr/share/tomcat6/.hudson/jobs/ftpSvc-ivy/workspace/trunk/out/jars/ftpSvc-lib.jar
[ivy:publish] published ftpSvc-lib to /usr/share/tomcat6/.ivy2/local/esf/ftpSvc/SNAPSHOT/ftpSvc-lib-SNAPSHOT.jar
Collecting Module information for module: ftpSvc
Module location: /tmp/ivy2450884590736960955.xml
[ivy:publish] published ivy to /usr/share/tomcat6/.ivy2/local/esf/ftpSvc/SNAPSHOT/ivy-SNAPSHOT.xml
Build finished triggered
Deploying artifact: http://my.server.employer.com:8080/artifactory/target-repository/esf/ftpSvc/SNAPSHOT/ftpSvc-SNAPSHOT.jar
Deploying artifact: http://my.server.employer.com:8080/artifactory/target-repository/esf/ftpSvc/SNAPSHOT/ftpSvc-SNAPSHOT.xml
Deploying build info to: http://my.server.employer.com.com:8080/artifactory/api/build
Dubya'Tee Eff!?再次,本地发布似乎工作正常,将jar和ivy.xml文件发布到Hudson服务器上的本地/ esf / ftpSvc / SNAPSHOT /目录 . 另一方面,Artifactory插件会让一切都完全错误 . 它不仅无法发布两个jar中的一个,而且还错误地重命名了ivy.xml文件 .
有没有Hudson / Ivy / Artifactory专家可以解释这里发生的事情?我有多个项目表现出完全相同的行为 . 任何和所有协助解决这个问题将不胜感激 .
2 回答
嘿,我没有使用过该插件,但我会尝试从名称
ftpSvc-lib
中删除短划线和/或从artifact
元素中删除type="lib"
,只是为了看看会发生什么 .我遇到了同样的问题,在JFrog Jira上填了一个bug,这个bug今天已被标记解决了,但正如你在Jira的评论中所看到的,我仍然对此解决方案感到困惑 .
https://issues.jfrog.org/jira/browse/IAP-26?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
如果有人有想法,任何输入都会很棒......