当工件名称与模块名称不同时,使用Grab下载常春藤依赖罐

时间:2019-07-09 18:01:58

标签: jenkins groovy dependency-management ivy grape

在Jenkins groovy脚本中,我试图使用以下内容下载依赖项:

@Grab(group='myorg', module='SuiteCreator', version='1.16.1', conf='jar', transitive=false)
import myorg.myorgAPI

我有一个 /home/jenkins/.groovy/grapeConfig.xml 文件,其内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<ivy-settings>
    <settings defaultResolver="downloadGrapes"/>
    <resolvers>
        <chain name="downloadGrapes">
            <sftp user="admin" userPassword="pw" host="ivy.myorg.com" name="myrepository" checkmodified="true">
                <ivy pattern="/data/ivy/repo/[organisation]/[module]/[branch]/[revision]/ivy-[revision].xml"/>
                <artifact pattern="/data/ivy/repo/[organisation]/[module]/[branch]/[revision]/[artifact]-[revision].[ext]"/>
            </sftp>
        </chain>
    </resolvers>
</ivy-settings>

我尝试获取的模块的 ivy-1.16.1.xml

<?xml version="1.0" encoding="UTF-8"?>
<ivy-module version="1.0">
    <info organisation="myorg" module="SuiteCreator" branch="master" revision="1.16.1" status="release" publication="20190417105814"/>
    <configurations>
        <conf name="jar" description="Distribution jar"/>
    </configurations>

    <publications>
        <artifact name="myorg-suitecreator" type="jar" ext="jar" conf="jar"/>
    </publications>
</ivy-module>

所以我只是想抓住工件: myorg-suitecreator-1.16.1.jar

当我在Jenkins中运行groovy脚本时,出现以下错误:

  

2019.07.09 18:06:15 org.codehaus.groovy.control.MultipleCompilationErrorsException:   启动失败:   2019.07.09 18:06:15转换期间的一般错误:抓取葡萄时出错-[下载失败:   myorg#SuiteCreator#master; 1.16.1!SuiteCreator.jar]   2019.07.09 18:06:15   2019.07.09 18:06:15 java.lang.RuntimeException:捕获Grapes错误-[下载失败:myorg#SuiteCreator#master; 1.16.1!SuiteCreator.jar]   2019.07.09 18:06:15 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)

从该错误看来,Grape假设常春藤工件名称与模块名称相同。位于 / ivy-module / publications / artifact / @ name 的ivy-1.16.1.xml工件名称被定义为 myorg-suitecreator ,但是 Grab 似乎正在尝试下载: SuiteCreator.jar

grapeConfig.xml中的工件模式为:

<artifact pattern="/data/ivy/repo/[organisation]/[module]/[branch]/[revision]/[artifact]-[revision].[ext]"/>

所以我要抓取的文件实际上是: /data/ivy/repo/myorg/SuiteCreator/1.16.1/myorg-suitecreator-1.16.1.jar

有人对如何使其工作有任何建议(或者Grab可以从Ivy下载具有不同工件名称的工件到模块名称吗?)。

1 个答案:

答案 0 :(得分:0)

我放弃了尝试使用Grab来实现这一目标。我发现Grab的另一个局限性在于它不允许指定要检索的工件的分支。我意识到,最好不要在 master 分支或单个发行分支上发布版本,但是在开发环境中确实有此要求。

相反,我只是在Jenkins中使用了 Invoke Ant 构建步骤来检索我的Ivy工件。我们已经在开发过程中使用了ANT,所以这并不困难。 Invoke Ant Build Step

ANT build.xml脚本与我希望运行的Groovy脚本位于同一git存储库中。 检索套件创建者目标只是一个ivy-retrieve

<target name="retrieve-suite-creator" depends="clean, install-ivy">
    <ivy:retrieve conf="suite-creator" type="jar" pattern="${build.dir}/[artifact].[ext]" log="${ivy.resolve.log}" settingsRef="${ivy.build.settings}"/>
</target>

使用我的ivy.xml(同样在与groovy脚本相同的存储库中):

<ivy-module version="1.0">
    <info organisation="myorg" module="MyAutomation" status="integration" branch="${ivy.branch}"/> 
    <configurations>
        <conf name="suite-creator" description="Configuration for Suite Creator"/>
    </configurations>
    <dependencies> 
        <dependency org="myorg" name="SuiteCreator" branch="mybranch" rev="1.16.1" conf="suite-creator->suite-creator" changing="true"/>
    </dependencies>
</ivy-module>

我必须将 suite-creator 常春藤配置添加到SuiteCreator模块的ivy.xml(在单独的SuiteCreator Git存储库中)。我无法使用现有的 jar 配置,因为它还会下载所有不需要的传递依赖。

<ivy-module version="1.0">
    <info organisation="myorg" module="SuiteCreator" status="integration" branch="${ivy.branch}"/>
    <configurations>
        <!-- Build configurations -->
        <conf name="build" description="Classes used in jar compilation"/>
        <conf name="jar" description="Distribution jar"/>
        <conf name="suite-creator" description="Just the myorg-suitecreator.jar"/>
    </configurations>

    <publications>
        <artifact name="myorg-suitecreator" type="jar" ext="jar" conf="jar,suite-creator"/>
    </publications>

    <dependencies>
    ...
    </dependencies>
</ivy-module>

最后,在完成 Invoke Ant 的构建步骤之后,在Jenkins的工作中,我进行了 Execute Groovy Script 的构建步骤,在该步骤中,必须将下载的jar添加到< strong>课程路径。 Execute Groovy Script build step