#continuous-integration #hudson #archive #jenkins #artifacts
#непрерывная интеграция #хадсон #Архив #дженкинс #артефакты
Вопрос:
Не мог бы кто-нибудь, пожалуйста, объяснить мне идею артефактов в процессе сборки?
У меня есть каталог workspace, где я просматриваю код для компиляции и запуска моих ant-скриптов и т.д. В конце, в моем случае, я получаю jar-файл, готовый к установке. Считается ли это артефактом?
Куда я должен указать своему сценарию сборки поместить файл jar? В каталоге workspace? Мой файл jar получает уникальное имя файла в зависимости от таких переменных, как BUILD_ID
и тому подобное, как я могу указать Jenkins, какой файл jar выбрать?
РЕДАКТИРОВАТЬ: Хорошо, итак, я попытался сделать что-то вроде этого:
Путь еще не существует в моей рабочей области, потому что предполагается, что сценарий сборки должен его создать, и, конечно, .jar
и .properties
файлов там нет, потому что они еще не были сгенерированы. Почему тогда это выдает мне ошибку? Похоже, я что-то упускаю.
Кроме того, удаляет ли Jenkins артефакты после каждой сборки (не архивные артефакты, я знаю, что могу сказать ему удалить их)? В противном случае это довольно быстро приведет к засорению жесткого диска.
Комментарии:
1. Ошибка, которую вы получаете, скорее всего, не является проблемой — если процесс сборки прошел успешно, она должна быть создана. Сохраните и попробуйте это, наличие нескольких неработающих сборок при настройке конвейера совершенно нормально. 🙂
2. Не пугайтесь предупреждения, если артефакт сгенерирован после сборки, он будет заархивирован в вашем конфиге (хотя на странице конфигурации есть предупреждение).
Ответ №1:
Ваше понимание верно, артефакт в смысле Jenkins — это результат сборки — предполагаемый результат процесса сборки.
Общим соглашением является помещение результата сборки в каталог build
, target
или bin
.
Архиватор Jenkins может использовать globs ( target/*.jar
), чтобы легко подобрать нужный файл, даже если у вас есть уникальное имя для каждой сборки.
Комментарии:
1. @Andres спасибо, также, удаляет ли дженкинс артефакты после каждой сборки (не архивные артефакты, я знаю, что могу сказать ему удалить их)? или я несу ответственность за то, чтобы сделать это myslef?
2. @michael: Вам придется самостоятельно очищать рабочее пространство, рекомендуется очищать по крайней мере целевой каталог перед каждой сборкой, чтобы убедиться, что вы не получите результаты более ранней сборки.
3. @Michael Вы можете добавить «чистый» этап сборки. Например. с помощью Maven —
sh 'mvn clean package'
4. @AndersLindahl — «общим соглашением является помещение результата сборки в каталог сборки, целевой каталог или каталог bin». Вы имеете в виду каталог bin, который является общим для всех проектов? Как мне это сделать? Это действие после сборки?
5. @user3240688 Нет, я имею в виду целевые папки для каждого проекта. Если вы хотите, чтобы артефакты из нескольких заданий были помещены в одну общую папку, вам придется опубликовать артефакты, используя, например, один из плагинов «Опубликовать через $ PROTOCOL».
Ответ №2:
Артефактом может быть любой результат вашего процесса сборки. Важно то, что не имеет значения, на каком клиенте она была собрана, она будет перенесена из рабочей области обратно на мастер (сервер) и сохранена там со ссылкой на сборку. Преимущество заключается в том, что он версионирован таким образом, вам нужно настроить резервное копирование только на вашем главном компьютере и что все артефакты доступны через веб-интерфейс, даже если все клиенты сборки отключены.
В качестве имени артефакта можно определить регулярное выражение. В моем случае я заархивировал все файлы, которые хотел сохранить, в один файл с постоянным именем во время сборки.
Комментарии:
1. «В качестве имени артефакта можно определить регулярное выражение. В моем случае я заархивировал все файлы » Не могли бы вы это объяснить? это звучит именно так, как я хочу?
Ответ №3:
Кроме того, удаляет ли Jenkins артефакты после каждой сборки? (не архивированные артефакты, я знаю, что могу сказать ему удалить их)
Нет, Hudson / Jenkins сам по себе не очищает рабочее пространство после сборки. В процессе сборки могут выполняться действия, которые стирают, перезаписывают или перемещают артефакты сборки с того места, где вы их оставили. В конфигурации задания, в расширенных параметрах проекта (которые необходимо расширить), есть опция под названием «Очистить рабочее пространство перед сборкой», которая удалит рабочее пространство в начале новой сборки.
Ответ №4:
В Jenkins 2.60.3 есть способ удалить артефакты сборки (не архивированные артефакты), чтобы сэкономить место на жестком диске на компьютере сборки. В разделе «Общие» установите флажок «Удалить старые сборки» со стратегией «Вращение журнала», а затем перейдите к ее расширенным параметрам. Появятся еще два варианта, связанные с сохранением артефактов сборки для задания на основе количества дней или сборок.
Настройки, которые работают для меня, заключаются в том, чтобы ввести 1 для «Максимального количества сборок, которые нужно сохранить с артефактами», а затем выполнить действие после сборки для архивирования артефактов. Таким образом, все артефакты из всех сборок будут заархивированы, вся информация из сборок будет сохранена, но только последняя сборка сохранит свои собственные артефакты.