Jenkinsfile: как получить триггер сборки

Я пытаюсь выяснить, как определить, что вызвало запуск сборки из скрипта Jenkinsfile. Причина в том, что у меня есть сценарий в контейнере докера, который я хочу запустить в задании cron, поэтому, когда задание cron запускается, я просто хочу, чтобы он запускал контейнер, но когда я нажимаю изменения, я хочу, чтобы он проверял код, перестроить контейнер, запустить статический анализ кода, запустить тесты и т. д. Нет необходимости во всем этом при запуске cron.

Как узнать причину? Я пробовал currentBuild.getCauses(), но получаю

groovy.lang.MissingMethodException: No signature of method: org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper.getCauses() is applicable for argument types: () values: []

Я пробовал println currentBuild.getRawBuild().getCauses(), но получил

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use method org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper getRawBuild

Как узнать причину сборки в jenkinsfile?


person ewok    schedule 21.05.2018    source источник
comment
У меня возникла эта проблема, и я нашел два способа ее решения: 1) перейти в раздел «Управление Jenkins», а затем «Утверждение сценария в процессе» и утвердить этот вызов, или 2) поместить команду в функцию в библиотеке, которая либо выполняет всю необходимую работу. или возвращает строку или массив или любую другую причину сборки. currentBuild.getCauses() не существует (я предполагаю) и currentBuild.getRawBuild().getCauses() существует, но заблокирован системой безопасности. Мне потребовалось некоторое время, чтобы правильно структурировать библиотеку, но большая часть информации находится здесь jenkins.io / doc / book / pipeline / shared-libraries   -  person Quantic    schedule 21.05.2018
comment
issues.jenkins-ci.org/browse/JENKINS-41272 открыт для посещения поддерживая это.   -  person mkobit    schedule 21.05.2018
comment
@JoaoVitorino Я не могу использовать это в файле Jenkins. Подробности смотрите в вопросе   -  person ewok    schedule 21.05.2018


Ответы (3)


Этот код Groovy получит имя запускающего проекта (и он отлично работает в песочнице Groovy):

String getTriggeringProjectName() {
    if (currentBuild.upstreamBuilds) {
        return currentBuild.upstreamBuilds[0].projectName
    } else {
        return ""
    }
}
person Joman68    schedule 13.10.2020
comment
Это, безусловно, лучшее решение, отсутствие необходимости утверждать скрипты с уязвимостями безопасности - огромный плюс. - person Overt_Agent; 03.03.2021

manager.build.causes

для использования вам необходимо утвердить эти подписи

method org.jvnet.hudson.plugins.groovypostbuild.GroovyPostbuildRecorder$BadgeManager getBuild
method hudson.model.Run getCauses

Надеюсь, это поможет

person Simkin    schedule 22.05.2018

Имя проекта запускающей сборки (getUpstreamProject) и номер сборки (getUpstreamBuild ):

currentBuild.rawBuild.getCauses().get(0).getUpstreamProject()
currentBuild.rawBuild.getCauses().get(0).getUpstreamBuild()

Или другой способ, который, как мне кажется, может не потребовать изменения разрешений: currentBuild. getUpstreamBuilds (). get (0) .getProjectName ()

Мне нужна была ветка восходящего проекта в том, над чем я работаю:

currentBuild.getUpstreamBuilds().get(0).getRawBuild().getEnvVars().get("BRANCH_NAME", "")

Вот документация по этому поводу: getEnvVars ()

Кстати, вам придется включить множество разрешений.

person John Jones    schedule 12.10.2018