Как получить доступ к данным среды git в плагине jenkins, используя конвейер - PullRequest
0 голосов
/ 08 октября 2018

Я хотел бы получить хеш коммита git текущей сборки из плагина (то есть в классе Java, который расширяет hudson.tasks.Recorder).

Это работает для проекта вольным стилем:

EnvVars env = run.getEnvironment(listener);
String hash = env.get("GIT_COMMIT");

Однако в конвейерных проектах переменная среды GIT_COMMIT, очевидно, не установлена, поэтому хэш становится нулевым.Это верно даже для декларативного конвейера, где шаг проверки scm неявный.

Есть ли альтернативный способ получить хеш коммита в конвейерном проекте?

Редактировать: Чтобы уточнить, это касается получения хэша git commit из кода Java в плагине Jenkins, а не взаводной / Jenkinsfile.Кажется, что переменная окружения не будет существовать, когда плагин используется в конвейерных заданиях, поэтому я ищу обходной путь.

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

У меня была очень похожая проблема - вот как я ее решил.Хитрость заключается в том, чтобы сделать это внутри вашего StepExecution класса, поскольку он имеет доступ к StepContext - тогда вы можете получить набор переменных окружения.Код такой:

public class MyExecution extends SynchronousNonBlockingStepExecution<ReturnType> {
    ...

    @Override
    protected ReturnType run() throws Exception {
        try {
            StepContext context = getContex();
            EnvVars env = context.get(EnvVars.class);
            ...
        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        }
    }

    ...
}
0 голосов
/ 09 октября 2018

Попробуйте использовать currentBuild переменную.Он содержит поле changeSets, в котором содержатся сведения о списке коммитов.

Из документа:

changeSets

список изменений, поступающих из различныхСКМ проверки;каждый имеет вид и является списком коммитов;каждый коммит имеет commitId, timestamp, msg, author и disabledFiles, каждый из которых имеет editType и путь;

...