Как заставить Дженкинса копировать артефакты в динамический каталог?

Я пытаюсь заставить Дженкинса скопировать артефакты сборки в каталог архива на другом сервере с помощью подключаемого модуля scp.

В идеале я хотел бы иметь возможность динамического назначения в зависимости от версии сборки, чтобы результат был примерно таким: /builds/<build version>/

Для версии сборки, такой как 1.2.3.4, это будет выглядеть так:

/builds/1.2.3.4/

Читая страницу плагина scp, не похоже, что это возможно, но я подумал, что кто-то здесь, возможно, понял это.

Есть ли способ сделать это?

Не лучше ли просто поместить артефакты с номером версии, встроенным в имя файла, в одну директорию?


person afrosteve    schedule 09.03.2011    source источник


Ответы (1)


Как вы сказали, я не думаю, что плагин scp может сделать это напрямую. Однако может быть обходной путь.

В вашей сборке у вас есть доступ к номеру сборки с помощью $ BUILD_NUMBER (или% BUILD_NUMBER%, в зависимости от случая -> Linux против Windows).

В любом случае, как часть вашего скрипта, вы можете создать каталог с именем $ BUILD_NUMBER, так что:

mkdir -p $ BUILD_NUMBER

-or-

md% BUILD_NUMBER%

Так, например, новый каталог будет /path/to/workspace/1.2.3.4

После завершения сборки в конце сценария создайте указанный выше каталог, переместите в него свой артефакт и заархивируйте каталог с помощью tar / zip.

Используйте этот файл tar / zip как артефакт вашей работы.

Используйте плагин scp для передачи этого артефакта на целевую машину и распакуйте / распакуйте его там (скажем, в / path / to / artifact / directory).

Тогда у вас будет /path/to/artifact/directory/1.2.3.4.

Для следующей сборки, скажем, 1.2.3.5, вы создадите новый каталог (с именем 1.2.3.5), переместите в него свой артефакт в конце сборки, заархивируйте его и перенесите. Когда вы разархивируете его по месту назначения, у вас будет новый каталог /path/to/artifact/directory/1.2.3.5 с артефактом новой сборки в нем.

Я знаю, это звучит запутанно, но на самом деле это довольно легко реализовать.

person Sagar    schedule 10.03.2011
comment
Звучит хорошо, я попробую. Я получил аналогичный ответ и на доске Дженкинса. Спасибо за помощь! - person afrosteve; 18.03.2011
comment
Мы запускаем сборки maven2 в Jenkins, поэтому у нас нет сценария для всего этого ... т.е. объединить артефакты Jenkins после запуска maven и успешной сборки. Конфигурация задания для заданий Maven2 разрешает только синтаксис ‹includes› для архивации, но не позволяет архивировать на сетевое устройство или в расположение scp. Это возможно? - person djb; 13.04.2011
comment
Вы всегда можете использовать Execute Shell до того, как ваш материал maven будет запущен, и создать каталог, названный после $ BUILD_NUMBER. Затем вы можете использовать Maven для создания своего артефакта в этом каталоге или переместить его после завершения работы maven, снова используя Execute Shell. Это не обязательно должен быть отдельный сценарий. В этом есть смысл, вроде: - \? - person Sagar; 13.04.2011
comment
Execute Shell недоступен для заданий Maven2. Я копнул немного глубже и нашел плагин Jenkins M2 Extra Steps, который дает мне возможность делать именно то, что я хочу, после успешной сборки Maven2. wiki.jenkins-ci.org/display/JENKINS/M2+ Extra + Steps + плагин - person djb; 14.04.2011
comment
Ах, да. Прости за это. Я думал, у вас нормальная работа со ступенькой M2. Но хорошая находка! - person Sagar; 14.04.2011