Представление Jenkins в сборке, охватывающее несколько исполнений плагинов (Разработка плагинов) - PullRequest
0 голосов
/ 02 марта 2020

В настоящее время я разрабатываю совместимый с Pipeline плагин Jenkins. Плагин выполняет тесты в другой программе, сохраняет результаты тестов как артефакты и создает представление отчета в сборке.

Моя проблема в том, что если я запускаю плагин несколько раз (скажем, на разных этапах конвейера), он будет создавать новое представление отчета для каждого выполнения. Все эти представления содержат одинаковое содержимое (последние результаты выполнения), поскольку Jenkins сохраняет только один набор переменных для всех страниц. Эти переменные перезаписываются при каждом запуске плагина.

На мой взгляд это базовое c действие, описанное в расширенном учебнике по плагину Jenkins

public class xxxAction implements RunAction2

, который вызывается из моего xxxBuilder. java

@Override
public void perform(Run<?, ?> run, FilePath workspace, Launcher launcher, TaskListener listener) throws InterruptedException, IOException {
...
run.addAction(new xxxAction())
...
}

Как я могу проверить / получить доступ к моему уже существующему представлению или загрузить значения переменных, которые Дженкинс сохранил из последнего исполнения моего плагина, не создавая новое представление. Моя цель состоит в том, чтобы в сборке было одно представление отчета, где я мог бы отображать данные всех выполнений моего плагина в этой сборке.

1 Ответ

0 голосов
/ 02 марта 2020

После того, как мне очень повезло при просмотре фрагментов кода в codota, мне удалось заменить свое представление (и, следовательно, пересчитать содержимое) при каждом выполнении, сохраняя данные в нем через конечный пользовательский объект. Я добавляю и заменяю действие следующим образом (также есть функции замены):

if (run.getActions(PROVEtechAction.class).isEmpty()) {
    run.addAction(new PROVEtechAction());
} else {
    run.removeAction(run.getAction(PROVEtechAction.class));
    run.addAction(new PROVEtechAction());
}

Мой объект для хранения моих данных выглядит следующим образом:

public final class ResultObjects {

private static ArrayList<ResultObjects> TestResultList = new ArrayList<>();

public static ArrayList<ResultObjects> getTestResultList() {
    final ArrayList<ResultObjects> res = new ArrayList<>(TestResultList);
    return res;
}

public String someData;

...

public ResultObjects() {
    TestResultList.add(this);
    this.someData = null;
    ...
}
}

Это просто stati c список, в который я добавляю свои результаты.

...