【问题标题】:How to combine Ivy and Artifactory (plus Jenkins)?如何结合 Ivy 和 Artifactory(加上 Jenkins)?
【发布时间】:2014-02-26 19:48:11
【问题描述】:

我正在尝试升级我公司的库和工件管理。现在我们正在使用从 Jenkins 运行的 ant 脚本制作工件(jar、war、ear 文件)。我想添加 Ivy 和 Artifactory,但我有点不确定什么是最好的(或者至少是好的)配置。根据documentation, Ivy 有三个存储库(本地、共享和公共)和额外的缓存。阅读Artifactory docs,必须为 Artifactory 解析器(不是存储库?!)配置 Ivy 文件。 我的问题是:

  1. 这将是常春藤术语中的公共存储库吗?
  2. 您是否只使用一个 Artifactory 存储库进行开发(我们有 4 个团队)和部署管道?
  3. 什么是(近似)配置?可以吗(公众号+企业Artifactory)?

    <resolvers>
        <ibiblio name="libraries" m2compatible="true" />
        <url name="arti">
            <artifact pattern="http://localhost:8081/artifactory/libs-snapshot-local/[organization]/[module]/[revision]/[artifact]-[revision].[ext]"/>
            <ivy pattern="http://localhost:8081/artifactory/libs-snapshot-local/[organization]/[module]/[revision]/ivy-[revision].xml" />
        </url>
    </resolvers>
    



2 月 11 日更新: 仅作记录,这里是工作配置:

<credentials host="artifactory.host" realm="Artifactory Realm" username="admin" passwd="password"/>

<resolvers>
    <chain name="loc-ext">
    <filesystem name="tmp-lib">
        <artifact pattern="${ivy.settings.dir}/lib/[artifact].[ext]" />
    </filesystem>
    <ibiblio name="libraries"
        m2compatible="true"
        checkmodified="true"
        root="http://artifactory.host:8081/artifactory/ext-release-local" 
    />
    </chain>

    <ibiblio name="snapshots"
        m2compatible="true"
        pattern="[organisation]/[module]/[artifact]-[revision].[ext]"
        root="http://artifactory.host:8081/artifactory/libs-snapshot-local"
    />
</resolvers>

链解析器用于检索(fe 用于编译),tmp_lib 具有仅用于当前任务的库,libraries 是一种企业存储库,快照 用于发布。

【问题讨论】:

    标签: jenkins ivy artifactory


    【解决方案1】:

    我们使用 Artifactory、Jenkins 和 Ivy 来构建大多数项目或我们的项目,但我可能做错了。

    首先,我们不关心共享 存储库。这对我来说从来没有多大意义。共享 repo 看起来类似于 private repo,但在开发人员之间共享。是什么使它与仅在开发人员之间共享的 Artifactory 存储库如此不同?

    我们还使用&lt;ivy:makepom&gt; 创建pom.xml,然后使用mvn deploy 将我们的工件部署到我们的Artifactory 存储库,而不是使用&lt;ivy:publish&gt;。我们每个罐子做两个 pom,一个是 pom.xml,另一个是 pom-snapshot.xml。我们使用 Jenkins 的 Build Promotion Plugin 运行mvn deploy,每次成功构建以部署快照 jar,然后让开发人员通过 Build Promotion Plugin 手动“提升构建”以部署 release 版本的罐子。

    Ivy 有status 的概念,这看起来类似于 Maven 的快照与发布的想法,但我相信所有这些 jar 及其状态都部署到同一个 repo。我只是将状态设置为 release 并依赖于 Maven 中的快照/发布概念。

    开发人员可以从 jar 的快照版本切换到发布版本,只需在 ivy.xml 的修订版中添加或删除 -SNAPSHOT。这允许开发人员使用最近构建的 jar,而无需等待它们被提升到 release 存储库。

    我主要关心的是保持 Artifactory 与 Maven 兼容,因为我们的一些项目是 Maven 项目。其中一些是由于对 Ivy 没有 100% 熟悉,并且对 Maven 有更牢固的掌握。但是,它确实对我们有用,让我不必担心 Ivy 和 Maven 之间的差异。

    现在,您知道我们做错了,以下是您问题的答案:

    1. 这将是 Ivy 术语中的公共存储库吗?

    Ivy 有status 的概念,但我不确定 Maven 项目如何使用它。这就是我们使用mvn deploy 的原因以及我们构建快照并在每次构建时发布 pom 的原因。

    1. 您是否只使用一个 Artifactory 存储库进行开发(我们有 4 个团队)和部署管道?

    当然,为什么不呢?制作四个独立的存储库有什么好处。此外,即使您使用单独的存储库,您也可以使用单个 Artifactory 实例创建它们。这样,您可以为每个组的每个存储库分配读/写权限,但只需要维护一个 Artifactory 实例。

    1. 什么是(近似)配置?可以吗(公共 ibiblio + 企业 Artifactory)?

    我们是:

    <ivysettings>
        <resolvers>
            <ibiblio name="public"
                m2compatible="true"
                checkmodified="true"
                root="http://buildl01.tcprod.local/artifactory/libs-release" />
        </resolvers>
    </ivysettings>
    

    但我们不会以 Ivy 的方式进行部署。只是从 Maven 存储库中读取。 libs-release 是一个虚拟存储库,其中包括我们的本地存储库和来自 Maven、JBoss 的公共存储库以及我们需要的任何存储库。

    我有一个特殊的 ivy.dir 项目,它自动将 Ivy 集成到我们的构建中。您添加了 &lt;import file="${ivy.dir}/ivy.tasks.xml"/&gt; into your build, and you automatically have all the necessary Ivy settings. I also create several parallel macros such as`,它们是标准 Ant 任务的替代品,但在幕后做了一些神秘的事情。

    例如&lt;jar.macro&gt; 创建一个pom.xml、一个pom-snapshot.xml,并将Maven 信息(加上Jenkins 构建信息)嵌入到jar 中。通过这种方式,开发人员可以轻松地将 Ivy 集成到他们的构建过程中。

    【讨论】:

    • +1 我正在使用 Nexus,但采用了相同的方法。我不使用“本地”和“共享”的常春藤存储库。如果它没有发布到我的 Maven 存储库,它就不存在 :-)
    • @MarkO'Connor - 您可能使用 local 存储库,因为这是下载所有 jar 以运行 &lt;ivy:cachepath&gt;&lt;ivy:retrieve&gt; 等任务的地方。这是常春藤使用的缓存,所以它不会经常下载 jars。它默认存储在$HOME/.ivy2/cache 中,就像Maven 的缓存是$HOME/.m2/repository
    • 您指出 ivy 缓存文件是正确的,但这与“本地”和“共享”存储库不同。 Maven 客户端使用其本地存储库作为缓存。另一方面,Ivy 具有允许您发布到“本地”或“共享”解析器的默认设置。这些默认情况下会将文件保存在“~/.ivy2/local”和“~/.ivy2/shared”下。如前所述,我更愿意避免混淆并将我的文件发布到托管的 Maven 存储库。这意味着我总是提供一个 ivysettings 文件来覆盖默认设置。
    猜你喜欢
    • 2011-07-24
    • 2012-03-12
    • 1970-01-01
    • 2012-09-06
    • 1970-01-01
    • 2014-05-11
    • 2020-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多