Архивировать артефакты в Дженкинс

132

Может кто-нибудь объяснить мне идею артефактов в процессе сборки?

У меня есть каталог рабочей области, где я извлекаю код для компиляции и запуска своих скриптов ant и т. Д. В конце, в моем случае, я получаю файл jar, который готов к установке. Это считается артефактом?

Где я должен указать сценарию сборки файл jar? В каталоге рабочей области? Мой jar-файл получает уникальное имя файла в зависимости от таких переменных, как BUILD_IDи то, как я могу сказать Jenkins, какой jar-файл выбрать?

РЕДАКТИРОВАТЬ: Хорошо, поэтому я попытался сделать что-то вроде этого:

введите описание изображения здесь

Путь еще не существует в моем рабочем пространстве, так как сценарий сборки предполагается создать его, и, конечно же , .jarи .propertiesфайлы не там , потому что они еще не были сформированы еще. Почему это дает мне ошибку тогда? Похоже, я что-то упустил.

Кроме того, Дженкинс удаляет артефакты после каждой сборки (не архивные артефакты, я знаю, что могу сказать, чтобы удалить их)? В противном случае он довольно быстро засорит жесткий диск.

Майкл
источник
12
Ошибка, которую вы получаете, скорее всего, не проблема - если процесс сборки успешен, его следует создать. Сохраните и попробуйте это, имея несколько сломанных сборок при настройке конвейера - это совершенно нормально. :)
Андерс Линдал
3
Не пугайтесь предупреждения, если артефакт сгенерирован после сборки, он будет заархивирован вашей конфигурацией (хотя на странице конфигурации есть предупреждение).
Хуан Ф. Лей

Ответы:

68

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

Общая конвенция является положить результат сборки в build, targetили binкаталог.

Архиватор Jenkins может использовать globs ( target/*.jar), чтобы легко подобрать нужный файл, даже если у вас есть уникальное имя для каждой сборки.

Андерс Линдал
источник
@ Andres спасибо, также, jenkins удаляет артефакты после каждой сборки (не архивные артефакты, я знаю, что могу сказать, чтобы удалить их)? или я несу ответственность за это?
Майкл
6
@michael: Вы должны очистить рабочее пространство самостоятельно, перед каждой сборкой рекомендуется очищать хотя бы целевой каталог, чтобы убедиться, что вы не получите результатов предыдущей сборки.
Андерс Линдал
@Michael Вы можете добавить «чистый» шаг сборки. Например, с Maven -sh 'mvn clean package'
Snowcrash
@AndersLindahl - «общепринятым условием является помещение результата сборки в каталог сборки, цели или бина». Вы имеете в виду каталог bin, который используется всеми проектами? Как я могу это сделать? Это действие после постройки?
user3240688
@ user3240688 Нет, я имею в виду целевые папки для каждого проекта. Если вы хотите, чтобы артефакты из нескольких заданий в одной общей папке, вам нужно будет опубликовать артефакты, используя, например, один из плагинов «Publish over $ PROTOCOL».
Андерс Линдал
11

Артефакт может быть любым результатом вашего процесса сборки. Важно то, что неважно, на каком клиенте он был построен, он будет перенесен из рабочей области обратно на мастер (сервер) и сохранен там со ссылкой на сборку. Преимущество состоит в том, что он версионизируется таким образом, вам нужно только настроить резервное копирование на своем главном сервере и что все артефакты доступны через веб-интерфейс, даже если все клиенты сборки отключены.

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

Маттиас Аллевельдт
источник
3
«Можно определить регулярное выражение как имя артефакта. В моем случае я заархивировал все файлы». Не могли бы вы это объяснить? звучит именно так, как я хочу?
Крис Милберн
7

Кроме того, удаляет ли Дженкинс артефакты после каждой сборки? (не заархивированные артефакты, я знаю, что могу сказать ему удалить их)

Нет, Hudson / Jenkins сам по себе не очищает рабочую область после сборки. У вас могут быть действия в процессе сборки, которые стирают, перезаписывают или перемещают артефакты сборки с того места, где вы их оставили. В конфигурации задания в расширенных параметрах проекта (который необходимо развернуть) есть опция под названием «Очистить рабочее пространство перед сборкой», которая стирает рабочую область в начале новой сборки.

Codex24
источник
1

В Jenkins 2.60.3 есть способ удалить артефакты сборки (не заархивированные артефакты), чтобы сэкономить место на жестком диске на машине сборки. В разделе «Общие» установите флажок «Отменить старые сборки» со стратегией «Ротация журналов», а затем перейдите в ее дополнительные параметры. Появятся еще две опции, связанные с хранением артефактов сборки для задания в зависимости от количества дней или сборок.

Мне подходят настройки: ввести 1 в поле «Максимальное количество сборок для хранения с артефактами», а затем выполнить действие после сборки для архивации артефактов. Таким образом, все артефакты из всех сборок будут заархивированы, вся информация из сборок будет сохранена, но только последняя сборка сохранит свои собственные артефакты.

Отменить старые варианты сборки

Matt
источник