gpt4 book ai didi

Jenkins:以编程方式创建 Jenkins 嵌套/ListView View

转载 作者:行者123 更新时间:2023-12-04 01:14:39 25 4
gpt4 key购买 nike

我正在尝试在给定的父 View 下创建 jenkins View (ListView)。我能够在顶层创建 View ,但无法找到在给定父 View 下创建 View 的方法。我正在使用 groovy 来实现这一点。以下是用例:
1. 我使用嵌套 View 插件来组织作业。
2. 叶级 View 是 Jenkins ListView,所有作业都放置在叶级 View 下。

为了自动化 View 创建过程,我需要能够在 View 层次结构中的给定级别(或给定父 View 下)创建 View 。我能够创建 View ,但它总是作为顶级 View 创建。下面是我正在处理的脚本。使用这个脚本,即使我传递了父 View ,它也会在顶层创建。

import jenkins.model.* 
import hudson.model.ListView
import hudson.model.*

def name = 'Top_Level_View'
def viewObj = Jenkins.instance.getView(name)
def parentObj = viewObj.getOwner()


parentObj.getViews().each {
if( it.name == 'Top_Level_View'){
it.getViews().each{
if( it.name == "DevTools_View"){
it.getViews().each{
println "Views under DevTools_View: " + it.name
if(it.name == "1_Build_Triggers"){
println "Parent Name: " + it.getOwner().name
//Create a view under a given parent.
Jenkins.instance.addView(new ListView('Hello',it.getOwner()))
it.getOwner().getViews().each{
println "print view Name: " + it.name
}
}
}
}
}
}
}

下面是进一步的分析。有两个主要类参与 View 创建过程:hudson.model.ViewGroupMixIn 和 jenkins.model.Jenkins。必须调用 Jenkins.addView(View view) 方法才能创建 View 。该方法依次调用 ViewGroupMixIn 类的 addView() 方法。

Jenkins 类中的 addView
public void addView(View v) throws IOException {
viewGroupMixIn.addView(v);
}

从 ViewGroupMixIn 添加 View
public void addView(View v) throws IOException {
v.owner = owner;
views().add(v);
owner.save();
}

请注意, View 的所有者被 addView 方法覆盖。因此,即使我们通过 View 的所有者,也会采用默认值。
viewGroupMixIn 实例在 Jenkins 类中被声明为 final,这里是 viewGroupMixIn 的声明:
private transient final ViewGroupMixIn viewGroupMixIn = new ViewGroupMixIn(this) {        
protected List<View> views() { return views; }
protected String primaryView() { return primaryView; }
protected void primaryView(String name) { primaryView=name; }
};

ViewGroupMixIn 的构造函数:
public abstract class ViewGroupMixIn {
private final ViewGroup owner;

/**
* Returns all the views. This list must be concurrently iterable.
*/
protected abstract List<View> views();
protected abstract String primaryView();
protected abstract void primaryView(String newName);

protected ViewGroupMixIn(ViewGroup owner) {
this.owner = owner;
}

我们无法在不修改 Jenkins 类的情况下更改所有者。上面的片段来自 jenkins.model.Jenkins 类。请注意,在创建 ViewGrouopMixIn 对象时,传递了代表 Jenkins 对象的“this”引用。这意味着无法以编程方式创建嵌套 View 。它只能通过 UI 创建。除此之外,NestedView-Plugin 的 NestedView 类不支持将所有者传递给构造函数。看起来不像可以通过这种方式创建 View 。不确定是否有其他方法可以做到这一点。

最佳答案

我建议使用 Job DSL非常容易组织和控制 Job 上的东西的插件。

你可以在 Groovy 的帮助下使用这样的东西:

listView('myJobs') {
jobs {
name('job1')
name('job2')
....
....

}

columns {
status()
weather()
.....}

关于Jenkins:以编程方式创建 Jenkins 嵌套/ListView View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18068331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com