Установите имя и описание конвейера из Jenkinsfile.

Я пытаюсь сделать poc конвейера jenkins в виде кода. Я использую плагин папки организации Github для сканирования организаций Github и создания заданий для каждой ветки. Есть ли способ явно определить имена для заданий конвейера, получаемых из Jenkinsfile? Я также хочу добавить некоторые описания для рабочих мест.


person HarshaB    schedule 22.07.2016    source источник
comment
Не могли бы вы показать фрагменты из Jenkinsfile?   -  person Jayan    schedule 26.07.2016
comment
для других, желающих изменить описание задания/проекта, а не описание сборки, см. stackoverflow.com/questions/39200948/   -  person Mark    schedule 19.09.2017


Ответы (3)


Вам нужно использовать currentBuild, как показано ниже. Часть node важна

node {
    currentBuild.displayName = "$yournamevariable-$another"
    currentBuild.description = "$yourdescriptionvariable-$another"
}

Редактировать: Над одним переименовывается сборка, где в качестве исходного вопроса речь идет о переименовании заданий. Это сделает следующий сценарий в конвейере (для этого требуются соответствующие разрешения)

item = Jenkins.instance.getItemByFullName("originalJobName")
item.setDescription("This description was changed by script")
item.save()
item.renameTo("newJobName")
person Jayan    schedule 23.07.2016
comment
Привет Джаян, спасибо за ответ. Я уже пробовал вариант currentBuild.description. Он отображался как тег под номером сборки в разделе «История сборки». Но я хочу установить их таким образом, чтобы они отображались в разделе «Конфигурация просмотра» для заданий. Это выполнимо? - person HarshaB; 25.07.2016
comment
Не увидел пути в настройках плагина. Ответ выше обновлен для использования API renameTo (которое вы, возможно, уже видели) - person Jayan; 26.07.2016
comment
Большое спасибо Джаян. Это сработало как шарм. Именно то, что я хотел. Я должен был убедиться, что я разрешаю запуск этих сценариев, одобрив их в разделе утверждения сценария Jenkins-›In-Process. Есть ли способ вручную добавить новые классы на утверждение здесь? Я сделал это сейчас, выбрав опцию утверждения для всех классов, которые я использовал в этом скрипте, по одному за раз. Это не позволяло мне набирать какие-либо классы вручную и одобрять. - person HarshaB; 28.07.2016
comment
Это должен быть новый вопрос. Также примите/проголосуйте: мета. stackexchange.com/questions/5234/ - person Jayan; 29.07.2016
comment
Первоначальный вопрос касался работы, а не индивидуальной сборки. - person Mark; 19.09.2017
comment
Подход item.save() не работает для динамически создаваемых заданий (например, с BitBucket Branch Source): java.io.NotSerializableException: org.jenkinsci.plugins.workflow.job.WorkflowJob, поэтому по-прежнему нет возможности установить описание ... - person Akom; 11.12.2017
comment
Я получаю WorkflowScript: 8: Expected to find ‘someKey "someValue"’ @ line 8, column 9. script { ^ WorkflowScript: 11: No argument for map key "save" @ line 11, column 8. item.save() ^ WorkflowScript: 8: Invalid config option "script" for agent type "node". Valid config options are [label, customWorkspace] @ line 8, column 2. script { ^, когда пытаюсь это сделать. - person Magick; 19.09.2018

Я опаздываю на вечеринку по этому поводу, но этот вопрос заставил меня зайти в чат #jenkins, где я провел сегодня большую часть дня. Я хотел бы поблагодарить @tang^ из этого чата за помощь в изящном решении моей ситуации.

Чтобы задать описание ЗАДАНИЯ и отображаемое имя ЗАДАНИЯ для дочернего элемента в конвейере DECLARATIVE с несколькими ветвями, используйте следующий блок шагов на этапе:

steps {
    script {
        if(currentBuild.rawBuild.project.displayName != 'jobName') {
            currentBuild.rawBuild.project.description = 'NEW JOB DESCRIPTION'
            currentBuild.rawBuild.project.setDisplayName('NEW JOB DISPLAY NAME')
        }
        else {
            echo 'Name change not required'
        }
    }
}

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

person Joshua    schedule 01.03.2018
comment
Для этого вам потребуется утвердить вызовы отдельных скриптов с помощью метода утверждения песочницы Jenkins. Учитывая доступ, необходимый для изменения задания, вам нужно будет утвердить несколько классов для выполнения за пределами песочницы. - person Joshua; 05.04.2018

Я попытался использовать фрагмент кода из принятого ответа, чтобы описать мой конвейер Jenkins в Jenkinsfile. Мне пришлось обернуть фрагмент кода в функцию с аннотацией @NonCPS и использовать def для переменной элемента. Я поместил фрагмент кода в корень Jenkinsfile, а не в раздел node.

@NonCPS 
def setDescription() { 
    def item = Jenkins.instance.getItemByFullName(env.JOB_NAME) 
    item.setDescription("Some description.") 
    item.save()
}

setDescription()
person Mikalai Parafeniuk    schedule 05.01.2018
comment
@kyb, просто зайдите в Jenkins->Управление Jenkins->Утверждение сценария в процессе, вы должны заметить упомянутую подпись, ожидающую утверждения. Обратите внимание, что это считается опасным. - person Mikalai Parafeniuk; 05.04.2018