当 Artifact 名称与 Module 名称不同时使用 Grab 下载 Ivy Dependency Jar
Use Grab to Download Ivy Dependency Jar when Artifact name is not the same as Module name
在 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:
startup failed:
2019.07.09 18:06:15 General error during conversion: Error grabbing Grapes -- [download failed:
myorg#SuiteCreator#master;1.16.1!SuiteCreator.jar]
2019.07.09 18:06:15
2019.07.09 18:06:15 java.lang.RuntimeException: Error grabbing Grapes -- [download failed: myorg#SuiteCreator#master;1.16.1!SuiteCreator.jar]
2019.07.09 18:06:15 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
从错误来看,Grape 似乎假设 Ivy 工件名称与模块名称相同。位于 /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 下载具有不同工件名称的工件到模块名称?)。
我放弃了尝试使用 Grab 来实现这一点。我发现 Grab 的另一个限制是它不允许指定您希望检索的工件的 分支 。我意识到在 master 分支或单个发布分支上没有发布可能不是最佳实践,但我们在开发环境中确实有此要求。
相反,我只是在 Jenkins 中使用 Invoke Ant 构建步骤来检索我的 Ivy 工件。我们已经在开发过程中使用了 ANT,所以这并不困难。
ANT build.xml 脚本与我希望 运行 的 Groovy 脚本位于同一个 git 存储库中。 retrieve-suite-creator 目标只是一个 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 ivy 配置添加到 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 添加到我的 Class 路径 。
在 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: startup failed: 2019.07.09 18:06:15 General error during conversion: Error grabbing Grapes -- [download failed: myorg#SuiteCreator#master;1.16.1!SuiteCreator.jar] 2019.07.09 18:06:15 2019.07.09 18:06:15 java.lang.RuntimeException: Error grabbing Grapes -- [download failed: myorg#SuiteCreator#master;1.16.1!SuiteCreator.jar] 2019.07.09 18:06:15 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
从错误来看,Grape 似乎假设 Ivy 工件名称与模块名称相同。位于 /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 下载具有不同工件名称的工件到模块名称?)。
我放弃了尝试使用 Grab 来实现这一点。我发现 Grab 的另一个限制是它不允许指定您希望检索的工件的 分支 。我意识到在 master 分支或单个发布分支上没有发布可能不是最佳实践,但我们在开发环境中确实有此要求。
相反,我只是在 Jenkins 中使用 Invoke Ant 构建步骤来检索我的 Ivy 工件。我们已经在开发过程中使用了 ANT,所以这并不困难。
ANT build.xml 脚本与我希望 运行 的 Groovy 脚本位于同一个 git 存储库中。 retrieve-suite-creator 目标只是一个 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 ivy 配置添加到 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 添加到我的 Class 路径 。