Используйте Grab для загрузки Jar Dependency Jar, когда имя артефакта не совпадает с именем модуля - PullRequest
0 голосов
/ 09 июля 2019

В скрипте 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, я получаю следующую ошибку:

2019.07.09 18:06:15 org.codehaus.groovy.control.MultipleCompilationErrorsException: сбой при запуске: 2019.07.09 18:06:15 Общая ошибка при конвертации: ошибка при получении Grapes - [ошибка загрузки: 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-1.16.1.xml по адресу: / ivy-module / публикации / артефакт / @ имя определяется как 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 голосов
/ 16 июля 2019

Я бросил попытки использовать Grab для достижения этой цели.Я обнаружил, что другим ограничением Grab является то, что он не допускает спецификацию ветви артефакта, который вы хотите получить.Я понимаю, что отсутствие релизов в master ветви или отдельной ветке релиза не может быть лучшей практикой, но у нас есть это требование в нашей среде разработки.

Вместо этого я просто использовал Вызвать Ant шаг сборки в Jenkins, чтобы получить мой артефакт Айви.Мы уже используем ANT в нашем процессе разработки, так что это не составило труда.Invoke Ant Build Step

Сценарий ANT build.xml находится в том же хранилище git, что и скрипт Groovy, который я хочу запустить.Цель 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 в файл ivy.xml модуля SuiteCreator (в отдельном репозитории 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>

Наконец, в моей работе Jenkins после InvokeШаг сборки Ant , затем у меня был этап сборки Execute Groovy , где мне пришлось добавить загруженный файл jar в мой путь к классам .Execute Groovy Script build step

...