Как я могу переопределить часть имени сборки приложения-конвейера?

Мы переносим набор заданий (касающихся одной и той же кодовой базы) в конвейер. Основной причиной разделения на несколько заданий был достигнутый параллелизм и детализированные возвращаемые значения. Подход pipe/Jenkinsfile кажется подходящим. Некоторые плагины все еще отсутствуют, но в целом мы на правильном пути.

Одна из вещей, которых нам не хватает, — это хорошее название, которое у нас было раньше. Раньше каждая сборка получала имя вроде $jobname $buildnumber ($branch), что давало нам app-spec #42 (new-feature). Это привело к хорошей видимости на боковой панели jenkins «статус исполнителя».

С конвейером мы получаем только part of app-pipeline #23, что заставляет нас заглянуть в сборку и определить, что выполняется в любой момент времени.

Есть ли способ переопределить имя, которое отображается на боковой панели?

ОБНОВЛЕНИЕ

В основном мне нужен ответ на вопрос «какая часть параллельного конвейера работает в этом исполнителе».


person kronn    schedule 14.06.2016    source источник
comment
какие-нибудь решения еще?   -  person pvgoddijn    schedule 21.11.2016
comment
к сожалению нет. в настоящее время наша миграция отдельных заданий в один конвейер просто приостановлена ​​из-за этого (и других нетехнических аспектов).   -  person kronn    schedule 21.11.2016
comment
В последних версиях плагинов Jenkins Pipeline имя текущего этапа отображается на боковой панели. Вы заключили этапы в stage("stage name") {} блоков? То же самое касается параллельных блоков, просто дайте им осмысленные имена.   -  person Oren Chapo    schedule 24.09.2017


Ответы (3)


Поместите блок stage('name'){} в каждую параллельную запись. Название этапа появится в статусе исполнителя. Так что называйте свои этапы так, как хотите видеть в статусе.

Обратите внимание, что метка "part of ..." по-прежнему будет отображаться в очереди сборки, но статус исполнителя будет отображаться правильно.

parallel (
    'newOne': { stage('new-feature'){ //all the things } },
    'second': { stage('second branch'){ //all the things } },
    'third': { stage('third branch'){ //all the things } },
)  

Исполнитель покажет

jobname #nnn (new-feature) 
jobname #nnn (second branch)
jobname #nnn (third branch)

РЕДАКТИРОВАТЬ: я запустил тестовый конвейер, имитирующий работу с несколькими конфигурациями с тремя осями: ОС, JDK Fruit. Каждая ветвь комбинаций конфигураций работает параллельно и имеет именованную ветвь. Статус исполнителя указывает на каждую запущенную комбинацию:

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

person Rob Hales    schedule 19.10.2017
comment
Это stage или branch? Я уже использую stage('name'), что ничего не меняет в статусе исполнителя. Когда я попробовал ветку, я получил java.lang.NoSuchMethodError: No such DSL method 'branch' found among steps . - person nickb; 19.10.2017
comment
Упс. Стадия. Запутанные термины. Какую версию Дженкинса вы используете? Я тестировал на тестовом экземпляре 2.83, и он отлично работал. - person Rob Hales; 19.10.2017
comment
Я только что добавил скриншот своего теста. - person Rob Hales; 19.10.2017
comment
Выглядит лучше, я действительно ищу способ изменить часть multi-configPipeline из сценария сборки, это было бы идеально. Я использую Jenkins v2.32.1 с плагином конвейера v2.4. - person nickb; 20.10.2017
comment
Хммм ... Да, изменение отображения, чтобы не отображать имя самого задания в исполнителе, вероятно, потребует какого-то плагина. Если бы вы могли временно изменить имя задания (например, через groovy), оно, вероятно, показало бы одно и то же изменение для каждого исполнителя одновременно. - person Rob Hales; 20.10.2017
comment
Для меня это работает нормально. Я немного изменил свои настройки, так что теперь я использую это. @nickb может открыть новый вопрос, если это вам не поможет (извините). - person kronn; 24.10.2017

Попробуйте использовать:

currentBuild.displayName = "My friendly name"
person Krzysztof Krasoń    schedule 02.07.2016
comment
Я пробовал это, и это дает мне часть конвейера приложений № 23 (новая функция). Хотя это добавляет некоторую информацию, я до сих пор не знаю, работает ли это со спецификациями, статическим анализом или интеграционными тестами. Мы также много распараллеливаем, чтобы распределить время сборки между как можно большим количеством исполнителей. - person kronn; 04.07.2016
comment
Плагин установки дескриптора wiki.jenkins-ci.org/display/JENKINS/Description +Setter+Plugin, но для меня это обновляет завершение поста исполнителя. - person vaibhavnd; 05.07.2016

Использовать:

currentBuild.displayName="${JOB_NAME} ${BUILD_NUMBER} (${BRANCH})"

Если это декларативный конвейер, вам нужно обернуть его скриптом{}:

script
{
    currentBuild.displayName="${JOB_NAME} ${BUILD_NUMBER} (${BRANCH})"
}
person yorammi    schedule 24.10.2017
comment
Это изменяет имя сборки, а не имя задания. Имя задания — это то место, откуда исходит указанный текст. Кроме того, внесение этого изменения в параллельные этапы снова и снова только усугубляет проблему. Теперь вместо номера сборки в статусе исполнителя вы увидите любое имя, которое было установлено во время загрузки пользовательского интерфейса, но одно и то же имя сборки будет отображаться для всех исполнителей. - person Rob Hales; 25.10.2017
comment
Изменение имени задания приведет к изменению имени папки в папках build и workdpace. Этого нельзя и не следует делать во время сборки! - person yorammi; 26.10.2017
comment
Согласованный. Вы не можете изменить название работы. Потенциально вы можете создать плагин, который отображает что-то другое, кроме имени задания в исполнителе. Но изменение отображаемого имени сборки не решает эту проблему и может сделать ее еще более запутанной. - person Rob Hales; 26.10.2017
comment
Я не понимаю, зачем добавлять имя задания и имя ветки к номеру сборки - это уже есть - более запутанно - person yorammi; 26.10.2017
comment
Потому что в исходном посте они работают в нескольких ветвях параллельно. Имя сборки в исполнителе будет показывать только то, что было установлено при загрузке веб-интерфейса. И он покажет это для ВСЕХ текущих запущенных потоков. Таким образом, вы можете запускать ветки A, B, C и D одновременно, но если C был последним, кто установил отображаемое имя до того, как вы загрузили веб-экран, показывающий статус исполнителя, ВСЕ узлы исполнителя будут отображаться C, даже если они работают с A, B и C. - person Rob Hales; 26.10.2017
comment
Да. Хотите скриншот? Имя, отображаемое в экзекьюторе, показывает текущее имя сборки. Он не показывает имя сборки, как это было, когда этот исполнитель начал работать. - person Rob Hales; 26.10.2017
comment
Каждый раз, когда экран обновляется, каждый исполнитель изменяет имя сборки, поскольку каждый параллельный шаг изменяет displayName. Это тот же симулятор матричных заданий, который я использовал в своем ответе. Название сборки одинаковое на всех. В скобках он показывает реальный поток, в котором он работает. i.stack.imgur.com/yNCng.jpg i.stack.imgur.com/JLbvX.jpg - person Rob Hales; 26.10.2017
comment
ВОТ ЭТО ДА. Похоже на большую внутреннюю ошибку Дженкинса. - person yorammi; 26.10.2017
comment
Ха. Ок, открой тему и посмотри куда пойдет. Это не ошибка. - person Rob Hales; 26.10.2017
comment
Как вы это описываете, похоже, что он показывает неправильную ветку для исполнителя. Я ошибся? - person yorammi; 26.10.2017
comment
Он показывает неправильно, где показывает currentBuild.displayName. Но это потому, что он просто показывает, как называется сборка в то время, когда вы ее видите, а не то, что было установлено, когда «поток» начал выполняться. Это работает именно так, как должно работать. Отображаемое имя сборки — это просто имя сборки, которое отображается на экране при ее просмотре. - person Rob Hales; 26.10.2017