3

我有一个小型 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 Configuration 设置(再次,一些细节已被更改以掩盖我真正的超级英雄身份):

Artifactory 服务器: http://my.server.employer.com:8080/artifactory
目标存储库: target-repository
Ivy 模式: [organisation]/[module]/[revision]ivy-[revision].xml
Artifact 模式: "[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 服务器上的 local/esf/ftpSvc/SNAPSHOT/ 目录。另一方面,Artifactory 插件完全搞错了。它不仅无法发布两个 jar 之一,它还错误地重命名了 ivy.xml 文件。

是否有任何 Hudson/Ivy/Artifactory 专家可以对这里发生的事情有所了解?我有多个项目表现出完全相同的行为。解决此问题的任何和所有帮助将不胜感激。

4

2 回答 2

0

我遇到了同样的问题,在 JFrog Jira 上填了一个错误,今天这个错误已被标记为已解决,但正如你在我对 Jira 的评论中看到的那样,我仍然对这个解决方案感到困惑。

https://issues.jfrog.org/jira/browse/IAP-26?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel

如果有人有想法,任何输入都会很棒......

于 2011-02-17T14:13:22.530 回答
0

嘿,我没有使用过那个插件,但我会尝试从名称中删除破折号ftpSvc-lib和/或type="lib"从其artifact元素中删除,看看会发生什么。

于 2011-02-17T03:19:42.623 回答