Дженкинс - Использование результатов одной работы, на другой работе - PullRequest
7 голосов
/ 28 сентября 2011

У меня есть задание, которое запускает make-файл и генерирует некоторые файлы.Затем я хочу другую работу, которая публикует эти файлы на плющ.

Мне известен плагин рабочей области клона, но есть ли другие варианты?

Ответы [ 5 ]

1 голос
/ 29 сентября 2011

У вас есть несколько опций, одна из них - Clone Workspace, которая работает довольно хорошо, но удваивает необходимое дисковое пространство (что в нашем случае весьма актуально).Большинство других способов - это вариант Clone Workspace.

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

Однако, если вам это нужно и вы будете осторожны, это может быть жизнеспособным решением.

1 голос
/ 28 сентября 2011

Вы запускаете Makefile и публикуете на Ivy ?

Ivy является частью Ant и является модулем, использующим преимущества всемирной структуры репозитория Maven для получения необходимых jar-файлов и других зависимостей.

Не поймите меня неправильно, я использовал локальный удаленный репозиторий Maven для публикации библиотек C / C ++ (вы можете использовать wget для извлечения элементов), от которых будут зависеть другие проекты. Но я не делал этого, используя Айви.

Если вы думаете об Apache Ivy, то вы можете опубликовать, используя Maven . Есть плагин Maven Release, который скопирует ваш артефакт в ваш репозиторий Maven, но вы, вероятно, захотите сделать это развертывание.

В моих сборках Jenkins я просто заставил Jenkins выполнить шаг deploy-file maven из командной строки. Это позволило мне развернуть файлы в моем хранилище Maven Ivy без необходимости предварительного создания файла pom.xml. (Ну, вы все равно хотите создать pom.xml, потому что хотите включить иерархию зависимостей.)

Я обычно делал это в той же работе, что и работа, которая создала мой файл jar / war / ear. Однако, если вы хотите выполнить отдельную работу, вы можете использовать Copy Artifact Plugin . Этот плагин позволяет заданию B копировать любой или все опубликованные артефакты из задания A. Это намного быстрее и проще, чем клонирование всего рабочего пространства, если вам нужны только файлы jar .

1 голос
/ 28 сентября 2011

Мое личное предпочтение - делать подобные вещи, не полагаясь на внутреннюю файловую структуру Jenkins, хотя иногда это означает знание внутренней структуры ваших других инструментов сборки (например, Maven или, в вашем случае, Ivy).

Если бы я был на вашем месте, я бы сделал все за одно задание - то есть собрал, а затем "Ivy Publisher" (если такой плагин существует) опубликовал артефакт в удаленном хранилище Ivy.

Если это невозможно, попросите первое задание «установить» артефакт в локальный репозиторий / кэш (я не уверен, как он называется на Ivy), а затем попросите второе задание забрать его оттуда.

Я не уверен, что это обязательно лучший подход, но он хорошо сработал для меня.

Редактировать Я должен упомянуть - это не очень хорошо работает на распределенныхсредах, кроме как у вас, ваша распределенная среда состоит из нескольких узлов, которые имеют доступ к общей файловой системе NAS.

Edit 2 Я также использовал Copy To Slave Plugin для распределенных сред без общей файловой системы.

0 голосов
/ 05 октября 2011

Я бы пошел с основным файлом сборки, который обрабатывает обе подзадачи.Ant имеет набор задач выполнения, которые вы можете использовать для запуска другого файла сборки Ant, выполнения некоторых команд командной строки и т. Д. Смотрите здесь:

http://ant.apache.org/manual/tasksoverview.html

Возможно, вы могли бы запуститьmake с помощью команды Exec и обработайте публикацию ivy, выполнив сборку Ant с помощью команды Ant.

0 голосов
/ 28 сентября 2011

Используйте плагин Copy Artifact для копирования артефактов из задания A (компиляция) в задание B (публикация).

...