Я начинаю с Дженкинса на моем рабочем месте. Мы используем семантическое управление версиями с Teamcity, и я хочу реализовать то же самое в Jenkins. Моя проблема возникает, когда я сохраняю артефакты в папке сборки ($ JENKINS_HOME / jobs / $ JOB_NAME / builds / $ BUILD_NUMBER), потому что Jenkins использует только build_number для создания папки для сборки, поэтому, когда мне нужно сбросить de Build_number, будущие артефакты будут хранится в папке с предыдущими сборками.
Например:
У меня хранится сборка 1.3.1_develop.1, когда я сбрасываю Build_Number, следующая сборка должна быть 1.3.2_develop.1, и она должна храниться в папке 1 сборки 1.3.1_develop.1
Мой вопрос в том, может ли кто-нибудь объяснить мне, как бороться с автоматическим семантическим управлением версиями на jenkins, потому что мы сбрасываем номер сборки, мы увеличиваем мэр, второстепенный номер и номер патча.
Версия Jenkins: 2.89.4 Jobs -> Мы используем задания для компиляции Vuejs спереди и для развертывания обратно с помощью python (если это помогает)
Спасибо за любую помощь.
Ваша система сборки детерминирована? Всегда ли он дает одинаковый результат для каждого фиксированного набора входов? — person Carlos Cupeiro schedule 17.03.2018
Нет, моя система сборки создает папку, в которой Build_number всегда увеличивается, но я сбрасываю номер, чтобы начать заново. (Дженкинс так и поступает) — person Carlos Cupeiro schedule 19.03.2018
Первое, что я замечаю, это то, что вы неправильно используете семантическое управление версиями.
1.3.1_develop.1
должно быть1.3.1-develop+1
. Метаданным сборки всегда должен предшествовать знак плюса «+», и они не учитываются в порядке сортировки SemVer.Во-вторых, номер сборки никогда не «сбрасывается», в конечном итоге он может измениться, но его никогда не следует сбрасывать. Номер сборки, который не указывает на машину, выполняющую сборку, также обычно бесполезен, если только он не может быть когда-либо.
По сути, в семантическом управлении версиями нет понятия номера сборки. Стандарт определяет синтаксис для метаданных сборки, но полностью нейтрален в отношении того, что может быть включено. Номера сборки обычно бесполезны на уровне семантического управления версиями. Они используются для предотвращения конфликтов каталогов в системах сборки CI и даже предоставляют уникальный идентификатор для некоторых линеек продуктов (например, Windows), особенно там, где семантическое управление версиями не используется (снова Windows).
Я рекомендую использовать SHA-1 или лучший хэш входов сборки (например, Git commit Id) в метатеге сборки в дополнение к любому счетчику сборки и использовать его для имени вашего выходного каталога. Вы по-прежнему можете использовать монотонный счетчик в своих тегах prerelease, но вам нужно будет создать имя каталога вывода сборки, которое включает всю строку semver, чтобы сохранить уникальность.
В-третьих, ваша машина сборки — худшее место для архивации артефактов сборки! Автоматизация сборки может время от времени работать ужасно неправильно. Ваша система сборки не должна иметь доступа к вашему архиву артефактов сборки. Когда ваша сборка и начальное дымовое тестирование завершены, он должен сигнализировать процессу, запущенному на совершенно другой машине, чтобы переместить артефакты с машины сборки в более безопасное место. Ни один процесс, запущенный в системе сборки, не должен иметь права записи в ваш архив артефактов сборки.
Прежде всего спасибо за ваш ответ. Мы также храним успешные сборки в другом месте на машине Google, знаете ли вы, есть ли способ связать в сборке jenkins эту версию, скопированную на машине Google ?? Я хочу получить доступ к последним версиям в jenkins, я не знаю, правильный ли это способ сделать это, но в Teamcity мы можем получить доступ к 20 последним сборкам. Вы говорите об использовании счетчика, и это должно мне помочь, но есть способ автоматически увеличить этот счетчик ?? извините, если задаете тупые вопросы, но Дженкинс для меня новичок, и я действительно смущен этим — person Carlos Cupeiro; 19.03.2018
Jenkins — это просто еще одна случайная среда CI, о которой я ничего не хочу знать. Я могу помочь вам с SemVer и общими процессами / шаблонами CI, но не с деталями. Если у Jenkins нет встроенной поддержки того, что вы хотите сделать, вы всегда можете написать для этого сценарий. Счетчики довольно просто реализовать с помощью номера в файле. — person Carlos Cupeiro; 19.03.2018
Существует инструмент
GitVersion
, который делает то, что вы хотите, и его можно интегрировать с Jenkins или другим CI.https://gitversion.readthedocs.io/en/latest/build-server-support/build-server/jenkins/