当前位置: 首页 > 面试题库 >

詹金斯:在没有描述符的类上使用validateButton

凤高翰
2023-03-14
问题内容

我有一个hudson.model.ManagementLink(可创建一个页面,可以通过 Manage Jenkins 进行访问。

我有一些要使用验证的表单字段f:validateButton。如果要在(具有描述符的)config.jelly页面上执行此操作,则可以在Publisher描述符中使用一种简单的doXXX()方法。

如果我doXXX()直接向hudson.model.ManagementLink其中添加类似的方法,则实际上可以直接通过URL myPage /
myMethod访问,
但是该方法f:validateButton仅返回404,显然我需要发送表单值。

我遇到的一个潜在解决方案是CustomDescriptorByName,并将逻辑包含在我在其他地方拥有的描述符中,
但是我无法使其正常工作


问题答案:

为了回答上面的实际问题(即没有描述符),您可以向(以逗号分隔的)with属性提供验证所需的任何字段,f:validateButton然后将该method属性设置为类似于以下内容…

method="${it.fullURL}triggerOfficial"

…然后在java(it)中有一个方法…

public String getFullURL(){
    return Stapler.getCurrentRequest().getOriginalRequestURI().substring(1);
}

…然后还有执行验证本身的方法…

public FormValidation doTriggerOfficial() { 
    return FormValidation.ok("hello");
}

但是,如果要对通常没有描述符的类类型执行常规字段验证(不使用validateButton)…

1)添加implements Describable<YourClassName>到您的班级签名

2)添加类似这样的内容…

@SuppressWarnings("unchecked")
@Override
public Descriptor<ConfigLink> getDescriptor() {
    Jenkins jenkins = Jenkins.getInstance();
    if (jenkins == null) {
        throw new IllegalStateException("Jenkins has not been started");
    }
    return jenkins.getDescriptorOrDie(getClass());
}

3)加一个内部类(使用常规doCheckXXX方法)

@Extension
public static final class DescriptorImpl extends Descriptor<YourClassName> {...}

4)然后最后将其在jelly
add属性中链接descriptor="${it.descriptor}"f:form包含您要自动验证的表单元素的标签(这将调用getDescriptor步骤2中的详细信息)



 类似资料:
  • 经过阅读,我明白了我必须有一个Jenkins主机在场,才能通过Git网络钩子在OpenShift上产生一个Jen金斯奴隶。但是有没有办法在没有詹金斯主人的情况下产生詹金斯奴隶呢? 非常感谢大家!

  • 问题内容: 我们正在升级到Jenkins(2.60.1)的新版本,并且在以前的Jenkins版本(1.596 / 2)中运行的groovy脚本不再起作用。 这是一个Jenkins构建项目,已参数化,我们正在使用Groovy脚本为Choice Provider提供选择(Choice Provider设置为System Groovy Choice Parameter)。 我们正在尝试访问Jenkins

  • 我在Win2003服务器上安装了Jenkins,但当安装完成并尝试在浏览器中加载GUI时,它失败,并显示“Internet explorer无法显示此网页消息”。 我已经卸载和重新安装了好几次,重新启动,重新安装了最新的java,但仍然没有运气! 希望有人能告诉我们下一步该做什么,甚至解决这个问题。 更多信息: 我很久以前就安装了它作为一种服务,它正在工作。但是它后来被放在次要位置,所以被禁用了。

  • 有没有可能让詹金斯使用真正的浏览器而不是无头浏览器?我正在运行一些用TestNG编写的测试(使用Selenium webdriver)。当我运行testng时。在Eclipse中,浏览器启动并运行测试。但当我使用Jenkins并用maven运行测试时,它不会启动任何浏览器。

  • 问题内容: 如何轻松地将Jenkins与qUnit集成?我将使用真正的浏览器(如firefox和chrome)运行测试。我的服务器在RedHat 6.1 Linux上运行。我想我都需要插件/库,但我仍然不知道如何使其工作。我第一次与Jenkins合作(在服务器端)。 //编辑: 如果有人也可以共享想法如何构建覆盖率报告,那将是很棒的。 提前致谢 :)。 问题答案: 说詹金斯和QUnit只是难题的一

  • 我想做一些非常简单的事情,在一个文件夹中,我有一个jar文件和一个包含脚本的名为脚本的文件夹。但我可以让詹金斯拉链来做这件事。 zip目录:“awsdeploy”,排除:“”,glob:“”,“scripts/”,zipFile:“SQSToElasticProcessor.zip” 必须显式命名“zip”的参数。@ 第 31 行,第 16 列。