【问题标题】:Jenkins view in build covering multiple plugin executions (Plugin development)构建中的 Jenkins 视图涵盖多个插件执行(插件开发)
【发布时间】:2020-06-14 14:58:46
【问题描述】:

我目前正在开发一个与管道兼容的 Jenkins 插件。该插件在另一个程序中执行测试,将测试结果保存为工件并在构建中创建报告视图。

我的问题是,如果我多次执行插件(比如在不同的管道阶段),它将为每次执行创建一个新的报告视图。所有这些视图都包含相同的内容(最新的执行结果),因为 Jenkins 只为所有页面保存了一组变量。每次执行插件时,这些变量都会被覆盖。

我的视图是扩展 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())
...
}

如何在不创建新视图的情况下检查/访问我已经存在的视图或加载 Jenkins 从上次执行插件时保存的变量值。 我的目标是在构建中有一个报告视图,我可以在其中显示此构建中插件的所有执行的数据。

【问题讨论】:

    标签: java jenkins jenkins-plugins jelly


    【解决方案1】:

    在通过 codota 上的代码 sn-ps 筛选时非常幸运后,我设法在每次执行时替换了我的视图(并因此重新计算了内容),同时通过最终的自定义对象将数据保留在其中。 我添加和替换这样的动作(也有替换功能):

    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;
        ...
    }
    }
    

    这基本上只是一个静态列表,我将结果添加到其中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-06
      • 1970-01-01
      • 1970-01-01
      • 2015-11-19
      • 2013-01-28
      • 1970-01-01
      • 1970-01-01
      • 2015-02-09
      相关资源
      最近更新 更多